基础 filter 和 map
filter进行条件过滤需要的新集合
val list = listOf(1, 2, 3, 4)
// 过滤出偶数 2,4
Log.d(TAG, "test:${list.filter { it % 2 == 0 }} ")
val people = listOf(Person("George", 18), Person("Bob", 19))
// 过滤出大于18岁的
Log.d(TAG, "test: ${people.filter { it.age > 18 }}")
map进行元素操作改变元素内容,生成新集合
val list = listOf(1, 2, 3, 4)
// 对元素进行平方
Log.d(TAG, "test: ${list.map { it * it }}")
all、any、count、find判断条件
all:是否全部满足条件 Boolean
any:是否存在这个条件 Boolean
count:满足条件的个数 Int
find:找到存在的对象 T(如果有多个,则返回第一个)
val canIn27 = { p: Person -> p.age <= 27 }
val people = listOf(Person("a", 18), Person("a", 19), Person("c", 28))
// 条件判断
Log.d(
TAG, "是否都小于27岁: ${people.all(canIn27)} 是否存在小于27岁的:${people.any(canIn27)}" +
" 有多少个小于27岁:${people.count(canIn27)} 找到小于27岁:${people.find(canIn27)}"
)
groupBy 列表换成分组map Map<Key,Value>
val people = listOf(Person("a",18),Person("b",18),Person("c",27))
// Map: key->value eg: name->Person
Log.d(TAG, "test: ${people.groupBy { it.name }}")
flatMap 和 flatten 处理嵌套集合中的元素
flatMap:对集合中每个元素做变换(映射);把多个列表合并(平铺)成一个列表
flatten:不需要做任何变换,只是平铺一个集合
val books = listOf(Book("a", listOf("a1","a2")),Book("b", listOf("b1","b2")))
val str = listOf("abc","def")
val list = listOf(1..3,4..7,9..11)
Log.d(TAG, "输出author集合: ${books.flatMap { it.author }.toSet()} 输出字符集合:${str.flatMap { it.toList() }}" +
" 平铺集合:${list.flatten()}")
class Book(val title:String, val author:List<String>)
网友评论