表达式的语法:
{ x:Int,y:Int ->x+y}
参数 函数体
把表达式存储在一个变量中 然后把这个变量当作普通函数对待,(通过相应的实参调用他)
val sum={x:Int,y:Int ->x+y}
println(sum(2,4) )
people.maxby(it.age)
val sum={x:Int,y:Int->
println(")
x+y
}
println(sum(2,3))
成员引用: ::
Person :: age
类 成员
集合的函数式API
基础 filter map
list.filter{it%2==0}
filter 对给定符合匹配的数据进行判定过滤。可以移除部分元素但是不会去修改数据
map 可以对集合中的每一个元素应用给定的函数并把结果收集到另一个行的集合当中。个数不变但是每个元素根据给定的判断式做了变换。
all any count find 对集合的应用判断式:
检查所有元素是否都符合某个条件,通过all any 函数表达
count 检查有多少元素符合判断式
find 返回第一个符合判定式的元素
example:
val canBeInClue27={p:Person ->p.age<=27}
println(people.all(canBeInClue27)))
println(people.any(canBeInClue27))
println(people.count(canBeInClue27))
pritnln(people.find(canBeInClue27))
groupBy:把列表转化成分组的map
println(people.groupBy{it.age})
flatMap flatten :处理嵌套集合中的元素
flatMap:主要做了两件事 首先根据实参给定的函数对集合中的每个元素进行映射,然后把多个列表合并成一个列表
惰性集合操作:序列
people.asSequence()
.map(Person.name)
.filter{it.startWith("A")}
.toList()
惰性操作集合的入口就是Sequence接口, 可以逐个列举元素序列的元素集合。可以高效的对元素集合执行链式操作而不需要创建额外的集合来保存中间产生的结果。
with函数: with 返回的结果是执行的最后的一行代码的表达式的值
fun alphabet():String{
val stringbuilder=Stringbuilder()
return with(stringbuilder){
for( letter in 'A'...'Z')
this.append(letter)
}
this.toString()
}
fun alphabet()=with(Stringbuilder){
for( letter in 'A'...'Z')
this.append(letter)
}
this.toString()
}
apply 函数与with 相同 但是区别是返回的apply返回作为实参传递给他的对象
fun alphabet()=Stringbuilder().apply{
for( letter in 'A'...'Z')
this.append(letter)
}
} .toString()
小结:
1.lambda 允许作为参数传递给函数
2.通过在函数前面添加前缀::可以创建方法 构造方法 以及属性的引用
3.with 可以允许调用一个对象的多个方法不需要反复的写出这个对象的引用,apply 函数使你使用构建者风格
的API 创建和初始化任何对象
网友评论