说明已经在代码里面了,请看代码。若是有任何疑问或者建议,能够留言。谢谢。java
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.Unit
var hi2 = ComposeCall::sayHi
var com = ComposeCall()
hi2(com)//必需要传入类的实例才可以进行调用,至关于java的invoke同样
hi1(com, "jack")//传入类实例和参数,至关于java的invoke方法,去调用hi2,以及入参
//输出
// ComposeCall,sayHi:Hi!
// --->ComposeCall,sayHiToAny:Hi,jack
复制代码
val arr = arrayOf("Apple", "Banana", "", "Orange")
arr.forEach(::println)//空对象也输出了
println("--------------------------")
var narr = arr.plus("juice")//这里必须用另一个对象来接收,原来的对象不会改变
var newArr = narr.copyOf()//复制一份新的arr
newArr.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]
复制代码
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]
复制代码
val list = listOf(2, 3, 5)
println(list.reduce { ret, i -> ret + i })//第一个参数ret是结果,第二个参数是表明要执行的操做,
// 好比我这里是数组每一个元素相乘,最后吧结果输出给ret。。。。下面我将进行加法操做,以下
//输出:30
//加法操做
println(list.reduce { ret, i -> ret + i })
//输出:10
复制代码
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
复制代码
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]
复制代码
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 80
i rat 1
i cat "jack"
// TestInfix, dog 3 and 80
// TestInfix rat 3 and 1
// TestInfix, dog 3 and jack
复制代码
用 ? 调用是安全调用,在被调用的量为空时也返回null
用 !! 调用的是假定非空调用,在被调用的量为空时会发起空指针异常(NPE)
或者直接用条件判断(if-else)来事先决定好空量的处理方案
复制代码