天天看点

【Kotlin】Kotlin笔记7-Lambda编程2(List,Map的函数式API)

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")
}