前言
刚转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
本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/15108256.html
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。