集合的函数API

2020-08-10  本文已影响0人  主音King

基础 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>)
上一篇下一篇

猜你喜欢

热点阅读