map{}
:实现集合中元素的类型转换举个例子,现在有一个Model元素的集合:List<Model>
data class Model(val name: String = "", val id: Int = 0)
我们现在想从这个集合中获取到每个Model元素的id属性并组成一个新的集合,通常的做法如下:
fun map() {
val list = mutableListOf(Model(id = 4), Model(id = 2), Model(id = 9))
val result = mutableListOf<Int>()
list.forEach {
result.add(it.id)
}
}
麻烦,现在有了map
就可以这么写:val result2 = list.map { it.id }
当然也可以使用方法引用:val result2 = list.map(Model::id)
mapTo(){}
:比map
多了可以指定原始集合元素类型转换后写入的目标集合之前的map调用了会返回一个新的集合类型,有时候我们想把这个新的集合添加到已有的集合中,比如:
fun mapTo(source: MutableList<Int>) {
val list = mutableListOf(Model(id = 4), Model(id = 2), Model(id = 9))
//将转换后的集合写入到source中
source.addAll(list.map { it.id })
}
这样写起来也挺简单,但是我们还可以有更简单的写法:
//将转换后的集合写入到source中
list.mapTo(source) { it.id }
mapIndexed{}
:支持带索引的元素类型转换如果元素类型转换的时候还想知道该元素在集合中的索引,mapIndexed轻松搞定:
//index代表元素在集合中的索引
list.mapIndexed { index, model ->
}
filter{}
:过滤符合指定条件的元素开发中应该会经常遇到:从某个集合中筛选处符合特定条件的元素并重新组成一个新的集合,可能大家会立马写出下面代码:
fun filter() {
val list = listOf(3, 4, 6, 5, 2)
//从集合中筛选出不小于4的元素
val result = mutableListOf<Int>()
list.forEach {
if (it >= 4) {
result.add(it)
}
}
}
这样写起来还是比较繁琐,直接使用filter函数实现:
val result2 = list.filter { it >= 4 }
该函数还有和map
一样类似的函数:
filterIndexed{}
:带下表索引的过滤函数filterTo(){}
: 类似于mapTo
,可以将过滤后的元素写入到某个指定的集合中indexOfFirst{}
:正向查找集合中满足指定条件的元素的索引下标,不存在返回-1val result4 = list.indexOfFirst { it.id == 5 }
该函数还有下面的类似函数:
indexOfLast{}
: 反向查找集合中满足指定条件的元素的索引下标,不存在返回-1indexOf()
:正向查找指定的元素在集合中的位置,不存在返回-1lastIndexOf()
: 反向查找指定的元素在集合中的位置,不存在返回-1take(n)
:获取集合中前n个元素当n大于等于集合的长度时,即代表获取整个集合元素;当n小于0,则会抛出异常;
还有其他类似的集合函数:
first()/first{}
:获取集合第一个元素/符合指定条件的第一个元素last()/last{}
:获取集合最后一个元素/符合指定条件的最后一个元素takeLast(n)
: 获取集合中最后的n个元素阅读量:1884
点赞量:0
收藏量:0