标准库函数
apply函数
apply可以看做是一个对象的配置函数,隐式调用,返回配置好的对象 eg //不使用apply file:File=new File(“C://daxiong”) file.setReadable(true) file.setWriteable(true)
//使用apply file:File=new File(“C://daxiong”) file.apply{ setReadable(true) //隐式调用就是对于对象属性和方法,不用file.set…显示的调用 setWriteable(true) }
一些对对象属性的更改或者初始化操作,或者对象方法的初始化执行,可以使用apply方法来配置
let函数
传对象给lamabda表达式 显示调用,返回表达式最后一行 eg str=“ssdjkdd” str.let{it-> //传入对象str,使用属性时显示调用 “hello world $it” } 该函数主要是用对象的属性,进行计算操作,来得到并且返回某个结果。比较常用
run函数 与with函数
隐式调用,但返回表达式最后一行。 with 和run一样 只是把对象座位参数 例如with(a){}
also函数
把对象传给表达式,但是返回原有对象,利用副作用做事,所谓利用副作用做事,就是执行某个计算操作,但不会返回计算结果,返回原有对象(而let是返回计算结果)
takeif函数
如果满足条件,返回接受者对象 ,否则 返回null 。 takeunless 和takeif相反 。虽然也可以用if来替代,但是takeif可以在原对象上直接操作,避免了临时变量赋值麻烦。
eg file:File=new File(“C://daxiong”).takeif{ it.exists()&&it.isReadable() }
这样file对象如果不为null,那么就是可执行相关操作(这里存在且可读)的。
总而言之,这个函数的操作,就是在对象在执行某些操作之前,先判断这个对象是否符合要求(做一次筛选),从而避免一些异常的抛出。
集合类
list
(1)list的创建 : 不可变 listof() 可变 mutablelistof() 和livedata中的mutablelivedata差不多 可变和:不可变可以相互转化 有tolist 和tomutablelist函数 (2)获取元素 1-普通方式 ,和java差不多 2-getorelse(index){返回lamabda表达式最后一行} 用来防止崩溃,应该重视使用 eg println(list.getOrElse(2) { “越界” }) println(list.getOrElse(3243) { “你越界了” })
3-getornull(index) eg list.getornull(index)?:""
(3)mutator函数 1- list += “” 相当于 add 2- list -="" 相当于remove 3- list.removeif{it.contains("")} lamabda表达式 it指的是单个元素
(4)list集合便利 1- for in eg for(s in list){} 2- foreach eg list.foreach{it} 3- list.foreachIndexed{index,item-> }
(5)解构语法及其过滤
set
set 和list比较就是元素唯一,无序。 创建 setof mutablesetof 获取元素 elementAt 安全操作也都有 orelse ornull等等 mutator函数等也都有 。 除了本质特性之外,list有的,set都有。
注意:list和set可以互相转换 达到去重的目的 如果一个list需要去重,就把他转为set 再转为list
数组
数组类型 , list有toarray函数,比较简单。
map
创建和其他集合类差不多,分为可变与不可变 与java区别
(1)有to关键字 eg map=mapof(“a"to"aa”) 等于于pair(“a”,“aa”) (2)获取map值 1-[] 2-getvalue 安全的方法: 3-getorelse 4-getordefalut
(3)map遍历 1- foreach{it} 2-foreach{key,value-> }
(4)添加元素 1- mutator函数等都有 eg map+=(“a” to “dd”) 2- getorput eg map.getorput(key){“aa”} 若key存在 返回值,不存在 赋值aa并返回
https://www.jianshu.com/p/9dd5ddf0133a
|