观心静

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

前言

  刚转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")
}
结果 : [梨, 苹果]
结果 : [梨, 苹果, 水蜜桃]

去重集合

val packageNameList = filtrationTimeList.map { it.packageName }.distinct()

将集合元素转成大写

使用函数: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)]

将两个集合中多个字段相同item提取为一个新集合

就是双for 加 if 的语法糖组合

fun main() {
    val list1 = mutableListOf(Data("香蕉", 1, "B"),Data("苹果", 2 ,"A"),Data("水蜜桃", 3, "A"),Data("火龙果", 4, "A"))
    val list2 = mutableListOf(Data("柠檬", 1, "C"),Data("苹果", 2 ,"A"),Data("水蜜桃", 3, "A"),Data("火龙果", 4, "A"))
   //方式1 val list3 = list1.mapNotNull { it1 -> list2.find { it2 -> it1.id == it2.id && it1.type == it2.type } }
//方式2 val list4 = list1.filter { it1-> list2.find { it2-> it1.id == it2.id && it1.type== it2.type } != null} println(list3) println(list4) } data class Data(val name:String, val id: Int, val type:String)
[Data(name=苹果, id=2, type=A), Data(name=水蜜桃, id=3, type=A), Data(name=火龙果, id=4, type=A)]
[Data(name=苹果, id=2, type=A), Data(name=水蜜桃, id=3, type=A), Data(name=火龙果, id=4, type=A)]

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

例子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)]

集合多元素组合降序排序

        //将u1和u2的位置对调一下就是降序了
        wifiList.sortWith(kotlin.Comparator { u1, u2 ->
            if (u1.isSavePwd) {
                u2.isSavePwd.compareTo(u1.isSavePwd)
            } else {
                u2.rssi.compareTo(u1.rssi)
            }
        })

集合排序打乱

mHandlerList.shuffled()

End

posted on 2021-08-06 14:10  观心静  阅读(242)  评论(0编辑  收藏  举报