Kotlin笔记7-Lambda编程2-List,Map的函数式API
4.2 Lambda编程2
- Lambda表达式
Example:
//list
//最长水果单词
fun findLongestFruit() {
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
var maxLengthFruit = ""
for (fruit in list) {
if (fruit.length > maxLengthFruit.length)
maxLengthFruit = fruit
}
println("max length fruit is $maxLengthFruit")
}
集合的函数式API
fun findLongestFruit1() {
//优化
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val maxLengthFruit = list.maxByOrNull { it.length }
println("max length fruit is $maxLengthFruit")
}
Lambda表达式的语法结构
{ 参数名1: 参数类型, 参数名2: 参数类型 -> 函数体 }
序号 | Tips |
1 | 最后一行会作为Lambda的返回值 |
推演过程:
val lambda = { fruit: String -> fruit.length }
val maxLengthFruit = list.maxByOrNull(lambda)
直接传入:
val maxLengthFruit = list.maxByOrNull({ fruit: String -> fruit.length })
移到括号外:
val maxLengthFruit1 = list.maxByOrNull() { fruit: String -> fruit.length }
lambda是函数唯一参数,省略括号:
val maxLengthFruit2 = list.maxByOrNull { fruit: String -> fruit.length }
类型推导:
val maxLengthFruit3 = list.maxByOrNull { fruit -> fruit.length }
唯一参数,it代替:
it: 唯一参数,it代替
val maxLengthFruit4 = list.maxByOrNull { it.length }
- Map函数API
序号 | Tips |
1 | 将集合的每个元素映射成一个另外的值 |
Example:
fun getUpperFruits() {
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val newlist = list.map { it.toUpperCase() }
for (fruit in newlist) {
println(fruit)
}
}
filter:
Example:
fun filterFruits() {
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val newlist = list.filter { it.length < 5 }
.map { it.toUpperCase() }
for (fruit in newlist) {
println(fruit)
}
}
any: 是否存在一个元素满足指定条件
val anyResult = list.any { it.length <= 5 }
all: 是否所有元素都满足指定条件
val allResult = list.all { it.length <= 5 }
//any&all
fun anyAndAll() {
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val anyResult = list.any { it.length <= 5 }
val allResult = list.all { it.length <= 5 }
println("anyResult is $anyResult, allResult is $allResult")
}