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)來事先決定好空量的處理方案
復制代碼