• kotlin开发 集合函数


    前言

      刚转kotlin开发,而且大部分时间是java与kotlin混合的情况下,所以此篇博客记录一些list集合函数操作例子.帮助与强化记忆.

    更新集合中的内容

    fun main() {
        val list = mutableListOf<Data>(Data("皮卡丘",1), Data("双弹瓦斯",2), Data("宝石海星",3))
        list.forEach { it.name = "宝可梦" }
        println("内容 = $list")
    }
    
    data class Data(var name: String, var id: Int)
    内容 = [Data(name=宝可梦, id=1), Data(name=宝可梦, id=2), Data(name=宝可梦, id=3)]

    获取集合最后一位元素

    fun main() {
        val list = mutableListOf<Data>(Data("皮卡丘",1), Data("双弹瓦斯",2), Data("宝石海星",3))
        val item = list.last()
        println("内容 = $item")
    }
    
    data class Data(var name: String, var id: Int)
    内容 = Data(name=宝石海星, id=3)

    查找集合中最长的字符串

    使用函数: maxBy

    fun main() {
        val list = listOf("", "苹果", "水蜜桃")
        val lengthLongestItem = list.maxBy { it.length }
        print("结果 : $lengthLongestItem")
    }
    结果:水蜜桃

    复制集合

    fun main() {
        val list = mutableListOf<String>("", "苹果", "水蜜桃")
        val newList = list.toMutableList()
        list.removeAt(2)//删除第二个值,来确定newList是独立内存地址的新集合
        println("结果 : $list")
        println("结果 : $newList")
    }
    结果 : [梨, 苹果]
    结果 : [梨, 苹果, 水蜜桃]

    将集合元素转成大写

    使用函数:map

    fun main() {
        val list = mutableListOf<String>("pear", "apple", "peach")
        val netList = list.map { it.toUpperCase() }
        println("结果 : $list")
        println("结果 : $netList")
    }
    结果 : [pear, apple, peach]
    结果 : [PEAR, APPLE, PEACH]

    提取一个实体类集合中的某个字段为新集合

    使用函数:map

    fun main() {
        val list = mutableListOf<Data>(Data("", 1), Data("小雨", 2), Data("雨夹雪", 3))
        val netList = list.map { it.name }
        println("结果 : $list")
        println("结果 : $netList")
    }
    
    data class Data(val name: String,val id: Int)
    结果 : [Data(name=晴, id=1), Data(name=小雨, id=2), Data(name=雨夹雪, id=3)]
    结果 : [晴, 小雨, 雨夹雪]

     

    将二维数组内容转成一维数组

    使用函数:flatMap

    fun main() {
        val data1 = Data(mutableListOf("A", "B", "C"), 1)
        val data2 = Data(mutableListOf("E", "F", "G"), 2)
        val data3 = Data(mutableListOf("H", "Y", "J"), 3)
        val list = mutableListOf<Data>(data1, data2, data3)
        val newList = list.flatMap { data: Data -> data.list.asIterable() }
        println("newList = $newList")
    
    }
    
    data class Data(val list: MutableList<String>, val id: Int)

    结果:

    newList = [A, B, C, E, F, G, H, Y, J]

     

    查找集合中首个符合要求的元素

    使用函数:find

    fun main() {
        val intArray = listOf<Int>(1, 2, 3, 4, 5, 6, 7, 8)
        val item = intArray.find { it < 2 }
        println("结果: $item")
    }
    结果: 1

    查找集合中全部符合要求的元素

    使用函数: filter

    例子1

    fun main() {
        val list = mutableListOf<Data>(Data("", 1), Data("小雨", 2), Data("雨夹雪", 3))
        val netList = list.filter { it.name == "雨夹雪" }
        println("结果 : $list")
        println("结果 : $netList")
    }
    
    data class Data(val name: String,val id: Int)
    结果 : [Data(name=晴, id=1), Data(name=小雨, id=2), Data(name=雨夹雪, id=3)]
    结果 : [Data(name=雨夹雪, id=3)]

    例子2

    使用函数: filter

    fun main() {
        val list = mutableListOf<Data>(Data("", 1), Data("小雨", 2), Data("雨夹雪", 3))
        val netList = list.filter { it.name.length > 1 }
        println("结果 : $list")
        println("结果 : $netList")
    }
    
    data class Data(val name: String, val id: Int)
    结果 : [Data(name=晴, id=1), Data(name=小雨, id=2), Data(name=雨夹雪, id=3)]
    结果 : [Data(name=小雨, id=2), Data(name=雨夹雪, id=3)]

    查找两个集合中交集的元素

     使用函数: filter

    fun main() {
        val list1 = mutableListOf<Data>(Data("", 1), Data("小雨", 2), Data("雨夹雪", 3))
        val list2 = mutableListOf<String>("", "暴风雪", "晴转多云")
        val netList = list1.filter { it.name in list2 }
        println("结果 : $netList")
    }
    
    data class Data(val name: String, val id: Int)
    结果 : [Data(name=晴, id=1)]

    查找两个集合中不交集的元素

    例子1

    使用函数: filter 

    fun main() {
        val list1 = mutableListOf<Data>(Data("", 1), Data("小雨", 2), Data("雨夹雪", 3))
        val list2 = mutableListOf<Int>(2, 4, 6)
        val netList = list1.filter { it.id !in list2 }
        println("list1不交集的内容为 : $netList")
    }
    
    data class Data(val name: String, val id: Int)
    list1不交集的内容为 : [Data(name=晴, id=1), Data(name=雨夹雪, id=3)]

    例子2

    使用函数: filter , map

    fun main() {
        val list1 = mutableListOf<Data>(Data("", 1), Data("小雨", 2), Data("雨夹雪", 3))
        val list2 = mutableListOf<Data>(Data("小雨", 4), Data("", 5), Data("暴风雪", 6))
        val netList = list1.filter { it.name !in list2.map { it1 -> it1.name } }
        println("结果 : $netList")
    }
    
    data class Data(val name: String, val id: Int)
    list1不交集的内容为 : [Data(name=雨夹雪, id=3)]

    判断集合中的一个元素是否满足条件

    例子1

    使用函数:any

    fun main() {
        val list = mutableListOf<Int>(1, 2, 3)
        val result = list.any { it > 2}
        println("list的集合内容是否有大于2 : $result")
    }
    list的元素否有大于2 : true

    例子2

    fun main() {
        val list1 = mutableListOf<Data>(Data("", 1), Data("小雨", 2), Data("雨夹雪", 3))
        val list2 = mutableListOf<Int>(3, 6, 9)
        val result = list1.any { it.id in list2 }
        println("list1的元素字段id是否包含list2的元素 : $result")
    }
    
    data class Data(val name: String, val id: Int)
    list1的元素字段id是否包含list2的元素 : true

    判断集合中的全部元素是否满足条件

     使用函数:all

    fun main() {
        val list1 = mutableListOf<Data>(Data("", 1), Data("小雨", 2), Data("雨夹雪", 3))
        val list2 = mutableListOf<Int>(1, 2, 3)
        val result = list1.all { it.id in list2 }
        println("list1的元素字段id是否与list2的元素一致 : $result")
    }
    
    data class Data(val name: String, val id: Int)
    list1的元素字段id是否与list2的元素一致 : true

    获取满足条件的元素数量

    使用函数:count

    fun main() {
        val intArray = listOf<Int>(1, 2, 3, 4, 5, 6, 7, 8)
        val num = intArray.count() { it < 4 }
        println("结果: $num")
    }
    结果: 3

    根据判断将元素拆分成Map集合

     使用函数:groupBy

    将奇数与偶数拆分

    fun main() {
        val intArray = listOf<Int>(1, 2, 3, 4, 5, 6, 7, 8)
        val map = intArray.groupBy { it % 2 == 0 }
        println("结果: $map")
    }
    结果: {false=[1, 3, 5, 7], true=[2, 4, 6, 8]}

    集合升序排序

    请注意,排序一律需要使用 mutableList 可变集合

    例子1

    使用函数:sort

    fun main() {
        val list = mutableListOf<Int>(7, 5, 6, 8, 2, 3, 1, 4)
        list.sort()
        println("内容 =  $list")
    }
    内容 =  [1, 2, 3, 4, 5, 6, 7, 8]

    例子2

    使用函数:sortBy 

    fun main() {
        val list = mutableListOf<Data>(Data("皮卡丘", 4), Data("双弹瓦斯", 1), Data("宝石海星", 2), Data("可达鸭", 3))
        list.sortBy { it.id }
        println("内容 = $list")
    }
    
    data class Data(var name: String, var id: Int)
    内容 = [Data(name=双弹瓦斯, id=1), Data(name=宝石海星, id=2), Data(name=可达鸭, id=3), Data(name=皮卡丘, id=4)]

    集合多元素组合升序排序

    使用函数:sortWith

    fun main() {
        val list = mutableListOf<Data>(Data("皮卡丘", 4), Data("双弹瓦斯", 1), Data("宝石海星", 2), Data("可达鸭", 3), Data("喵喵", 5))
        //先以名称长度排序,再以id排序
        list.sortWith(compareBy({ it.name.length }, { it.id }))
        println("内容 = $list")
    }
    
    data class Data(var name: String, var id: Int)
    内容 = [Data(name=喵喵, id=5), Data(name=可达鸭, id=3), Data(name=皮卡丘, id=4), Data(name=双弹瓦斯, id=1), Data(name=宝石海星, id=2)]

    集合降序排序

    使用函数:sortByDescending 

    fun main() {
        val list = mutableListOf<Data>(Data("皮卡丘", 4), Data("双弹瓦斯", 1), Data("宝石海星", 2), Data("可达鸭", 3), Data("喵喵", 5))
        list.sortByDescending { it.id  }
        println("内容 = $list")
    }
    
    data class Data(var name: String, var id: Int)
    内容 = [Data(name=喵喵, id=5), Data(name=皮卡丘, id=4), Data(name=可达鸭, id=3), Data(name=宝石海星, id=2), Data(name=双弹瓦斯, id=1)]

     

    https://www.jianshu.com/p/933977603e4c

    End

  • 相关阅读:
    bzoj1648
    bzoj3404
    bzoj1650
    bzoj1625
    bzoj1606
    bzoj1464
    bzoj1572
    bzoj1617
    bzoj1092
    bzoj1091
  • 原文地址:https://www.cnblogs.com/guanxinjing/p/15108256.html
Copyright © 2020-2023  润新知