1、过滤(filter)
val list =
listOf(Girl("依儿", 18, 168, "山东"),
Girl("笑笑", 19, 175, "河南"),
Girl("小百合", 17, 155, "福建"),
Girl("michel", 22, 148, "广东"),
Girl("猫咪", 28, 159, "广西"),
Girl("玲儿", 23, 169, "广东"),
Girl("环环", 25, 172, "安徽"),
Girl("胖嘟嘟", 32, 180, "河北"),
Girl("乔乔", 35, 180, "广东"),
Girl("小可爱", 27, 150, "江西"),
Girl("一生有你", 22, 163, "山东"),
Girl("敏儿", 28, 155, "黑龙江"),
Girl("月儿", 25, 178, "吉林"),
Girl("花儿", 21, 183, "山东"),
Girl("S小糖", 49, 190, "新疆"),
Girl("悦悦", 19, 160, "广西"),
Girl("小可爱", 29, 158, "广东"),
Girl("紫琪", 49, 149, "新疆"),
Girl("糖心", 26, 165, "甘肃"),
Girl("棒棒糖", 23, 172, "浙江"),
Girl("猪猪侠", 18, 173, "山东"),
Girl("喵喵", 27, 164, "河南"),
Girl("安琦", 19, 159, "河北"),
Girl("叶子", 20, 160, "广东"))
data class Girl(var name: String, var age: Int, var height: Int, var place: String)
fun main(args: Array<String>) {
//遍历 判断添加 添加到新的集合中
/*---------------------------- 俺是河南里,俺只找河南的妹子 ----------------------------*/
val list = ArrayList<Girl>()
//java方式
list.forEach {
if(it.place=="河南") {
list.add(it)
}
}
println(list)
/**
* filter参数是函数类型
* filter的predicate函数的参数 是Girl类型
* predicate 返回值 boolean
* filter函数返回值 List集合
*/
val list1 = list.filter {
it.place=="河南"
}
// println(list1)
/*---------------------------- 我只喜欢30岁以下的女生 ----------------------------*/
val list2 = list.filter {
it.age<30
}
// println(list2)
/*---------------------------- 我喜欢广东的 ,身高162以上, 25岁以下的妹子 ----------------------------*/
val list3 = list.filter {
it.place=="广东"&&it.height>162&&it.age<25
}
// println(list3)
/*---------------------------- 我喜欢广东的, 身高160以上, 35岁以上的妹子 ----------------------------*/
val list4 = list.filter {
it.place=="广东"&&it.height>160&&it.age>35
}
println(list4)
}
2、过滤
fun main(args: Array<String>) {
val list = listOf("张三","李四","王五","赵六","张四","李五","李六")
val list2 = listOf("周芷若","张无忌","张五","李善长","林青霞","李寻欢")
// 找到第一个姓张的
val list1 = list.find {
it.startsWith("张")
}
println(list1)
// 把第一个集合中所有姓张的找出来
val list3 = list.filter { it.startsWith("张") }
println(list3)
// 把两个集合中所有姓张的找到并存放在同一个集合中
val mulList = mutableListOf<String>()
list.filterTo(mulList){
it.startsWith("张")
}
list2.filterTo(mulList){
it.startsWith("张")
}
println(mulList)
// 把第一个集合中角标为偶数的元素找出来
val list5 = list.filterIndexed { index, s ->
index%2 == 0
}
println(list5)
}
3、排序
fun main(args: Array<String>) {
val list = listOf("z","b","d")
// 正序排序 b d z
println(list.sorted())
// 倒序排序
println(list.sortedDescending())
// 按字段排序
val list1 = listOf(Person("林青霞",50),Person("张曼玉",30),Person("柳岩",70))
//排序之后list1是不变的
val list3 = list1.sortedBy { it.age }
println(list3)
val list4 = list1.sortedByDescending { it.age }
println(list4)
}
data class Person(var name:String,var age:Int)
4、分组
fun main(args: Array<String>) {
val list = listOf("张三", "李四", "王五", "赵六", "张四", "李五", "李六")
//姓张的一组 姓李的一组 其他一组
val map = list.groupBy {
val first = it.substring(0,1)
when(first){
"张"->"张"
"李"->"李"
else->"其他"
}
}
println(map)
//按姓分组
val map1=list.groupBy {
it.substring(0,1)
}
println(map1)
}
输出:

image.png
5、最值
fun main(args: Array<String>) {
val list = listOf("z","g","r")
// 最大值
println(list.max())
// 最小值
println(list.min())
val list1 = listOf(Person("林青霞",50),Person("张曼玉",30),Person("柳岩",70))
// 对象最大值
list1.maxBy { it.age }
// 对象最小值
list1.minBy { it.age }
}
data class Person(var name:String,var age:Int)
6、去重
fun main(args: Array<String>) {
val list = listOf("张三","李四","王五","赵六","张四","李五","张三","李六","李四")
// 把重复的去掉
val set = list.toSet()
println(set)
//list集合
println(list.distinct())
list.distinctBy {
}
// 把重复的同姓的去掉
println(list.distinctBy {
//张 李 往 找
it.substring(0, 1)
})
}
输出:

image.png
7、集合拆封
fun main(args: Array<String>) {
val list = listOf("张三","李四","王五","赵六","张四","李五","张三","李六")
//姓张的一部分,另外的一部分
val pair = list.partition {
it.startsWith("张")
}
println(pair.first)
println(pair.second)
}
输出:

image.png
8、集合重新组合
fun main(args: Array<String>) {
val list1 = listOf(Person("林青霞",50),Person("张曼玉",30),Person("柳岩",70))
//将Person里面每一个name获取
val list2 = list1.map {
it.name
}
println(list2)
}
data class Person(var name:String,var age:Int)
输出:

image.png
9、集合相加
fun main(args: Array<String>) {
val list = listOf(Person("林青霞",50),Person("张曼玉",30),Person("柳岩",70))
//求出所有人的年龄之和
println(list.sumBy {
it.age
})
}
data class Person(var name:String,var age:Int)
输出:

image.png