Android

kotlin中 List、Map、集合的函数式API

2022-05-31  本文已影响0人  因为我的心

一、数组列表:

1、List

声明一个list并打印

    var lists = listOf("化学","物理","数学")
    for(list in lists){
        println(list)
    }
        //获取第一个对象
        val firstBean = lists.first()
image.png

listOf函数创建的是一个不可变的集合,创建可变集合使用 mutableListOf

val list = mutableListOf("Apple","Banana","Orange")
list.add("Pear")

前边介绍的是 List 集合的用法,实际上 Set 集合与此一模一样只是换成了 setOf() 和 mutableSetOf()

2、Map

Kotlin的Map集合用于保存key-value对

var map = TreeMap<String,String>()
map["好"] = "good"
map["学习"] = "study"
map["天"] = "day"
map["向上"] = "up"
for ((key, value) in map) {
    println("${key}->${value}")
}
image.png

从 Map 中读取一条数据可以这样写

println(map["好"])

像 List 和 Set 一样,Kotlin也提供了一对 mapOf() 和 mutableMapOf() 来简化 Map 用法

val map = mapOf("好" to "good","学习" to "study","天" to "day","向上" to "up")
for((key,value) in map){
    println("${key}->${value}")
}

二、集合的函数式API

image.png image.png

1、找出长度最长的单词

如果我们有一个水果集合,要找出单词最长的那个你可以这样写

val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    var maxLengthFruit = ""
    for(fruit in list){
        if(fruit.length > maxLengthFruit.length){
            maxLengthFruit = fruit
        }
    }
    println("max lenth fruit is "+maxLengthFruit)

运行结果

 max lenth fruit is Watermelon

如果我们使用集合的函数式API,可以让这个功能更简单

    val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    var maxLengthFruit = list.maxBy { it.length }
    println("max lenth fruit is "+maxLengthFruit)

现在看这段代码你可能比较吃力,因为还没有学 Lambda 表达式的语法结构。Lambda 就是一小段可以作为参数传递的代码,通常不建议在 Lambda 表达式中编写太长代码,否则可能影响代码可读性。Lambda 表达式语法结构如下:

{参数名1:参数类型,参数名2:参数类型 -> 函数体}

首先最外层是一对大括号,如果有参数传入到 Lambda 表达式中的话,我们还需要声明参数列表,参数列表结尾用一个 -> 符号表示参数列表结束以及函数体开始。函数体中可以编写任意行代码(不建议编写太长代码),并且最后一行代码会自动作为 Lambda 表达式的返回值

2、map函数:单词变成大写

集合中的 map 函数是最常用的一种函数式 API,它用于将集合中的每个元素都映射成另外的值,映射规则在 Lambda 表达式中指定,最终形成新的集合。例如,我们希望让所有水果都变成大写模式

val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    val newlist = list.map { it.toUpperCase() }
    for(fruit in newlist){
        println(fruit)
    }
image.png

3、filter 函数:保留5字以内的水果

filter 函数就是过滤集合中数据的,可以单独使用,也可以配合 map 函数使用

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

4、any 和 all

    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)

结果:

anyResult is true,allResult is false
上一篇 下一篇

猜你喜欢

热点阅读