第二十四节 集合的一些高级操作

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容