Kotlin 映射操作函数
2022-11-21 本文已影响0人
因为我的心
必看:https://www.bookstack.cn/read/JackChan1999-Kotlin-Tutorials/README.md
1、map(transform: (T) -> R): List<R>
将集合中的元素通过转换函数transform映射后的结果,存到一个集合中返回。
val list = listOf(1,2,3,4,5,6,7)
//1、map(transform: (T) -> R): List<R>
var list1 = list.map { it }
var list2 = list.map { it*2 }
var list3 = list.map { it+10 }
Log.d("LUO","----list1:${list1}") //list2:[1, 2, 3, 4, 5, 6, 7]
Log.d("LUO","----list2:${list2}") //list3:[2, 4, 6, 8, 10, 12, 14]
Log.d("LUO","----list3:${list3}") //list3:[11, 12, 13, 14, 15, 16, 17]
2、mapIndexed(transform: (kotlin.Int, T) -> R)
转换函数transform中带有下标参数。也就是说我们可以同时使用下标和元素的值来进行转换。 其中,第一个参数是Int类型的下标。
var list4 = list.mapIndexed { index,value ->
index*value
}
Log.d("LUO","----list4:${list4}") //list4:[0, 2, 6, 12, 20, 30, 42]
3、mapNotNull(transform: (T) -> R?)
遍历集合每个元素,得到通过函数算子transform映射之后的值,剔除掉这些值中的null,返回一个无null元素的集合。
val mainList = listOf("a","b",null,"x",null,"z")
var list5 = mainList.mapNotNull { it }
Log.d("LUO","----list5:${list5}") //list5:[a, b, x, z]
4、flatMap(transform: (T) -> Iterable<R>): List<R>
使用flatMap则是把list中的第一个元素映射成一个List1,然后把第二个元素映射成的List2跟List1合并:List1.addAll(List2),以此类推。最终返回一个“扁平的”(flat)List。
注意:扁平化映射,可以将多维数组或集合转换为一维集合
val list = listOf(1,2,3,4,5,6,7)
val aList = listOf("a","b","c")
var list6 = aList.flatMap({it->listOf(it+1,it+2,it+3)})
Log.d("LUO","----list6:${list6}") //list6:[a1, a2, a3, b1, b2, b3, c1, c2, c3]
5、 list.mapNotNullTo(bList)
mapNotNullTo:将list数据加入到bList中,it的数据操作,不影响bList返回值,最后:list和bList数值一样.
val list = listOf(1,2,3,4,5,6,7)
val bList = mutableListOf<Int>()
list.mapNotNullTo(bList){
when(it){
1 ->{
Log.d("LUO","----1-----")//执行了
}
2->{
Log.d("LUO","----2-----")//执行了
}
else ->{
Log.d("LUO","----else-----")//执行了
}
}
it
}
Log.d("LUO","----list:${list}") //list:[1, 2, 3, 4, 5, 6, 7]
Log.d("LUO","----bList:${bList}")//bList:[1, 2, 3, 4, 5, 6, 7]