美文网首页Android开发Android开发经验谈Android技术知识
Kotlin学习笔记(十二)函数操作符(映射操作符)

Kotlin学习笔记(十二)函数操作符(映射操作符)

作者: 大虾啊啊啊 | 来源:发表于2020-10-23 10:09 被阅读0次

1.flatMap

flatMap作用是为集合的每一个元素创建一个集合。并把所有集合合并成一个集合。

package com.example.kotlin01

val list = listOf(4, 1, 3, 5, 7, 9)

fun main() {
    val result = list.flatMap {
        listOf(1,2,3)
    }
    println(result)
}
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

为集合 list每一个元素创建一个集合(1,2,3),再把这些集合合并成一个集合。

2.groupBy

以集合的某个元素,或者某个元素的属性作为key进行分组value作为当前元素的对象集合返回一个map

package com.example.kotlin01

val list = listOf(User("小明", "男", 16), User("小明", "女", 18), User("小花", "女", 19))

fun main() {
    val result = list.groupBy {
        it.name
    }
    println(result.toString())
}
data class User(val name: String, val sex: String, val age: Int)


{小明=[User(name=小明, sex=男, age=16), User(name=小明, sex=女, age=18)], 小花=[User(name=小花, sex=女, age=19)]}

以user的name作为key,user的name一样的分到一个组作为value。返回一个map。以上有两个小明,所以分到了一个组,所以返回了一个长度为 2的map。

3.map

将集合的每个元素映射成其他类型,组装成新的集合。新的集合长度和原有的长度一样

package com.example.kotlin01

val list = listOf(User("小明", "男", 16), User("小明", "女", 18), User("小花", "女", 19))

fun main() {
    val result = list.map {
        it.name
    }
    println(result.toString())
}
data class User(val name: String, val sex: String, val age: Int)

[小明, 小明, 小花]

和flatMap不同的是,flatMap是为每个元素创建一个集合,然后把这些集合合并成一个集合。最终集合的长度和原来的集合长度不一定一样。

4.mapIndexed

为每一个索引设置新的元素,组装成新的集合

package com.example.kotlin01

val list = listOf(User("小明", "男", 16), User("小明", "女", 18), User("小花", "女", 19))

fun main() {
    val result = list.mapIndexed { index, user ->
        user.name
    }
    println(result)
}

data class User(val name: String, val sex: String, val age: Int)

[小明, 小明, 小花]

通过user.name组装成新的集合。我们在开发中也经常遇到这种需求,通过集合中某个对象的属性,组装成一个新的集合。

5.mapNotNull

mapNotNull和map的效果一样,只是mapNotNull过滤掉为null的元素

package com.example.kotlin01

val list = listOf(User("小明", "男", 16), User("小明", "女", 18), User("小花", "女", 19),null)

fun main() {
    val result = list.map {
        it?.name
    }
    println(result)
}

data class User(val name: String, val sex: String, val age: Int)

[小明, 小明, 小花]

通过user的name映射成一个新的集合,并且过滤掉null的。

6.小结

mapNotNull,mapIndexed,map都是通过某个属性或者某个数值把原有的集合映射成一个新的集合。最终集合的长度是一样的。groupBy则是通过某个key,对原有的集合进行分组,组成一个map。map的key就是我们分组的key,value就是符合条件的元素集合。flatMap则是将原有的集合的每一个元素创建一个集合,然后将这些集合合并成一个集合。

相关文章

网友评论

    本文标题:Kotlin学习笔记(十二)函数操作符(映射操作符)

    本文链接:https://www.haomeiwen.com/subject/hwommktx.html