kotlin之plus、copyOf、reverse、forEach、filter、map、reduce、fold等函數解釋和使用

kotlin之::函數調用、plus(增加元素)、copyOf(復制數組)、reverse(翻轉數組)、forEach(遍歷數組)、filter(過濾數組)、map函數操作及擴展、reduce函數、fold函數、filter、filterIndexed、takeWhile、infix關鍵字等的解釋和使用示例。

說明已經在代碼里面了,請看代碼。如果有任何疑問或者建議,可以留言。謝謝。

函數的其它用法::,操作函數的其它方式。

class ComposeCall {fun sayHi() {System.out.println("ComposeCall,sayHi:Hi!")}fun sayHiToAny(any: Any) {System.out.println("--->ComposeCall,sayHiToAny:Hi," + any)}
}
復制代碼

驗證

    var hi1 = ComposeCall::sayHiToAny//返回的是方法本身,而不是返回值println("hil:" + hi1)//輸出
//    hil:fun com.tanksu.ndkdemo3.feature.cls.ComposeCall.sayHiToAny(kotlin.Any): kotlin.Unitvar hi2 = ComposeCall::sayHivar com = ComposeCall()hi2(com)//必須要傳入類的實例才能夠進行調用,相當于java的invoke一樣hi1(com, "jack")//傳入類實例和參數,相當于java的invoke方法,去調用hi2,以及入參//輸出
//        ComposeCall,sayHi:Hi!
//        --->ComposeCall,sayHiToAny:Hi,jack
復制代碼

數組操作之plus(增加元素)、copyOf(復制數組)、reverse(翻轉數組)、forEach(遍歷數組)、filter(過濾數組)等方法對數組的操作。

        val arr = arrayOf("Apple", "Banana", "", "Orange")arr.forEach(::println)//空對象也輸出了println("--------------------------")var narr = arr.plus("juice")//這里必須用另外一個對象來接收,原來的對象不會改變var newArr = narr.copyOf()//復制一份新的arrnewArr.forEach(::println)println("--------------------------")arr.reverse()//將數組翻轉過來arr.forEach(::println)println("--------------------------")println(arr.filter(String::isNotEmpty))//filter將會過濾不為空的對象
//        Apple
//        Banana
//
//        Orange
//        --------------------------
//        Apple
//        Banana
//
//        Orange
//        juice
//        --------------------------
//        Orange
//
//        Banana
//        Apple
//        --------------------------
//        [Orange, Banana, Apple]
復制代碼

list的map函數操作及擴展,對數組進行自定義操作。

    val raw = listOf(1, 2, 3, 4, 5, 5)val newList = ArrayList<Int>()raw.forEach {newList.add(it + 1)//it替代raw中每一個元素,這里一次加入到newList中}println(newList)println(raw.map { it * 10 })//map先遍歷raw的元素,然后再執行打印動作println(raw.map(Int::toDouble))//map先將每個元素都變成double類型,然后再執行打印動作
//        [2, 3, 4, 5, 6, 6]
//        [10, 20, 30, 40, 50, 50]
//        [1.0, 2.0, 3.0, 4.0, 5.0, 5.0]
復制代碼

數組的reduce函數:遍歷數組元素,并自定義操作。和fold類似。

        val list = listOf(2, 3, 5)println(list.reduce { ret, i -> ret + i })//第一個參數ret是結果,第二個參數是代表要執行的操作,// 比如我這里是數組每個元素相乘,最后吧結果輸出給ret。。。。下面我將進行加法操作,如下//輸出:30//加法操作println(list.reduce { ret, i -> ret + i })//輸出:10
復制代碼

數組的fold函數用法:對數組進行進行自定義操作。和reduce類似。

    val list = listOf(2, 3, 5)println("--------------------------")println(raw.fold(10) { ret, i -> ret + i })//這里給了一個初始值10,然后fold操作和reduce操作類似println(raw.fold(StringBuilder("jack say:")) { ret, i -> ret.append(i) })//這里也給了一個初始值StringBuilder// ,在第二個參數里面才能夠進行append操作//輸出結果
//        --------------------------
//        20
//        jack say:235
復制代碼

數組方法之filter、filterIndexed、takeWhile等對數組元素操作。

        val list = listOf(4, 3, 2, 5, 6, 8, 9)println(list.filter { it == 3 || it == 6 })//過濾等于3或者等于6的元素集合,結果以新的集合返回println(list.filterIndexed { index, i -> index == i })//過濾等于第一個參數的元素集合,結果以新的集合返回println(list.takeWhile { it in 0..5 })//過濾在0-5之間的元素,結果以新的集合返回println(list.takeWhile { it in 3..5 })//過濾在3-5之間的元素,結果以新的集合返回。這里加入判斷到其中一個元素不滿足條件,就會終止執行下面的元素判斷//輸出結果
//        [3, 6]
//        [2]
//        [4, 3, 2, 5]
//        [4, 3]
復制代碼

infix的關鍵字解釋:函數的另外一種調用手法。(騷操作)

        class TestInfix(var age: Int) {infix fun dog(weight: Int) {println("TestInfix, dog $age and $weight")}infix fun cat(weight: String) {println("TestInfix, dog $age and $weight")}}infix fun TestInfix.rat(mounth: Int) {//這是println("TestInfix rat $age and $mounth")}var i = TestInfix(3)i dog 80i rat 1i cat "jack"
//        TestInfix, dog 3 and 80
//        TestInfix rat 3 and 1
//        TestInfix, dog 3 and jack
復制代碼

非空判斷:

用 ? 調用是安全調用,在被調用的量為空時也返回null
用 !! 調用的是假定非空調用,在被調用的量為空時會發起空指針異常(NPE)
或者直接用條件判斷(if-else)來事先決定好空量的處理方案
復制代碼

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449887.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449887.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449887.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux 常用命令 雜記

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.cat cat 命令用于連接文件并打印到標準輸出設備上。 使用權限 所有使用者 2.Linux chgrp命令用于變更文件或目錄的所屬群組。 3.Linux…

C程序員要學C++嗎?

最近網友問到這一問題&#xff0c;但我更希望被問的是“C程序員需要學面向對象編程嗎&#xff1f;”&#xff0c;那就讓我先從回答這一問題開始&#xff0c;并做適當的擴展。 就我的成長經歷來看&#xff0c;C程序員必須學習面向對象編程&#xff01;面向對象編程語言有其天然的…

追女生心理研究(本人母胎單身,就是想做準備,并無其他意思)

聊天話題&#xff1a; 1。興趣愛好&#xff1a;美食&#xff0c;旅游&#xff0c;寵物等 2。現在和曾經的自己&#xff0c;分享自己的經歷 3。我變成我們&#xff0c;未來規劃 4。分析隱私&#xff0c;比如一些小秘密 5。價值觀&#xff0c;對未來的規劃等 聊天話題技巧 …

dlopen 和 dlsym 動態調用函數

Linux/unix 提供了使用 dlopen 和 dlsym 方法動態加載庫和調用函數&#xff0c;這套方法在 macOS 和 iOS 上也支持。dlopen 打開一個庫&#xff0c;獲取句柄。dlsym 在打開的庫中查找符號的值。dlclose 關閉句柄。dlerror 返回一個描述最后一次調用dlopen、dlsym&#xff0c;或…

通過騰訊地圖服務獲取行政區劃信息

接口說明地址&#xff1a; https://lbs.qq.com/webservice_v1/guide-region.html 以下是源代碼及表創建腳本。 源碼及相關文件下載轉載于:https://www.cnblogs.com/challengesoflife/p/10405366.html

情感學習聊天方法

1.非正常聊天法 出人意料的聊天技巧&#xff0c;展示幽默感&#xff0c;讓對方對自己產生興趣 比如對方說&#xff1a;你的朋友圈好多美女啊。回答還好了&#xff0c;沒有了。場面會一度尷尬 但可以這么說&#xff1a;你這樣是在間接夸自己是美女。或者&#xff1a;還好啦&a…

面向對象設計的優點

一旦明白了軟件設計的真諦&#xff08;參見《軟件設計的真諦》&#xff09;&#xff0c;我們就更能理解面向對象設計的優點。簡單說來&#xff0c;它更便于我們在軟件中構建更真實的虛擬世界。 首先&#xff0c;對象的引入方便了在軟件虛擬世界中模擬現實世界。現實世界是由很…

利用SVD-推薦未嘗過的菜肴2

推薦未嘗過的菜肴-基于SVD的評分估計 實際上數據集要比我們上一篇展示的myMat要稀疏的多。 from numpy import linalg as la from numpy import * def loadExData2():return[[0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5],[0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 3],[0, 0, 0, 0, 4, 0, 0, 1, 0,…

在圖像中截取小圖并保存

實現以橫向步長step_row、縱向步長step_col&#xff0c;在一幅大圖上剪裁寬度為width、高度為height的小圖像&#xff0c;圖像命名形式為“數字(遞增)_大圖名”格式&#xff0c;將小圖保存在argv[6]的文件夾中。 #include <opencv2/opencv.hpp> #include <string> …

Linux 文件與目錄管理、ls、cd、pwd、mkdir、rmdir、cp、 rm

見&#xff1a;http://www.runoob.com/linux/linux-file-content-manage.html我們知道Linux的目錄結構為樹狀結構&#xff0c;最頂級的目錄為根目錄 /。 其他目錄通過掛載可以將它們添加到樹中&#xff0c;通過解除掛載可以移除它們。 在開始本教程前我們需要先知道什么是絕對路…

軟件設計的真諦

假設我們身邊的一切都是用制造材料加以描述的&#xff1a;“空調”不是“空調”&#xff0c;而是“由金屬和塑料做成的物體”&#xff1b;“書”不是“書”&#xff0c;而是“由纖維和墨做成的物體”。溝通時我們也不用“空調”和“書”這樣的詞匯&#xff0c;而是“金屬和塑料…

脫單特質

1.上進心 所有人都想過好日子&#xff0c;物質不行&#xff0c;一定要有上進心&#xff0c;可以做出未來給予 2.外在形象 注重打理外在形象&#xff0c;所有人都是愛美的 3.無法控制自己&#xff0c;同時不去了解女生 控制住自己&#xff0c;才有更多的時間去了解和思考女…

云棲社區云棲號(團隊博客)攻略【2018版】

云棲社區云棲號是什么&#xff1f; 這是一個為技術團隊打造的專區&#xff08;小站&#xff09;&#xff0c;團隊成員的技術文章將在這里匯總&#xff0c;可以幫助團隊沉淀優質技術內容、打造技術品牌和影響力等。 云棲號申請條件 點擊https://yq.aliyun.com/teams頁面右側的【…

1030 完美數列 (25 分)二分

1030 完美數列 &#xff08;25 分&#xff09;給定一個正整數數列&#xff0c;和正整數 p&#xff0c;設這個數列中的最大值是 M&#xff0c;最小值是 m&#xff0c;如果 M≤mp&#xff0c;則稱這個數列是完美數列。 現在給定參數 p 和一些正整數&#xff0c;請你從中選擇盡可能…

兩性位置

男生不被女生當回事&#xff0c;在自己身上&#xff0c;需要從自身找原因 1.過度看重對方&#xff0c;會讓對方看輕自己 2。氣場比較弱&#xff0c;本身實力弱&#xff0c;會讓對方俯視自己 3.太過善良&#xff0c;一昧遷就&#xff0c;會導致自己失去生活重心&#xff0c;讓…

高質高效軟件開發組織能力模型

背景至今&#xff0c;我在Motorola網絡部工作超過了5年&#xff0c;所在的產品線也是采用統一軟件開發過程和敏捷思想(但不是SCRUM)來組織軟件開發活動的&#xff0c;但這5年多的工作經歷從未引起我象微博上對于SCRUM話題的激烈討論這樣的思考。原因之一可能是&#xff0c;公司…

python并發編程之多線程

多線程 線程 1.什么是線程 進程是一個執行空間 , 線程就是其中真正工作的單位 , 每一個進程至少有一個線程(如果我們把操作系統比喻為一個工廠 , 進程就是車間 , 線程就是流水線) 進程包含了運行該程序所需要所有資源 , 進程是一個資源單位 , 線程是CPU的最小執行單位 每一個進…

JavaScript幾個難點

1. 立即執行函數 立即執行函數&#xff0c;即Immediately Invoked Function Expression (IIFE)&#xff0c;正如它的名字&#xff0c;就是創建函數的同時立即執行。它沒有綁定任何事件&#xff0c;也無需等待任何異步操作&#xff1a; (function() { // 代碼 // ...})(); f…

真格量化學習

真格量化學習使用 期權的量化回測 引入必須的庫: from PoboAPI import * import datetime import time import numpy as np初始化參數設定 以50為例 def OnStart(context) :print("I\m starting...")#設定一個全局變量品種,本策略交易50ETF期權g

智能小程序檔案館——如何給“包”瘦身

上傳小程序代碼的時候包體積太大不知如何是好&#xff1f;小程序打開速度慢&#xff0c;流量耗費大不知如何優化&#xff1f;在今天的文章里&#xff0c;我們一起來討論一下如何給“包”瘦身。 為什么要限制包的大小&#xff1f; 我們都知道小程序作為一種 Hybrid 的解決方案&a…