学习了kotlin这些内置的高阶函数,属实方便
data class Student(var name: String, var age: Int, var height: Int, var address: String)
var StudentDataBase = listOf(
Student("张三", 18, 165, "山东"),
Student("张三", 19, 166, "北京"),
Student("张三", 18, 167, "江苏"),
Student("张三", 17, 168, "河北"),
Student("张三", 15, 169, "新疆"),
Student("张三", 20, 163, "宁夏"),
Student("张三", 25, 163, "甘肃"),
Student("张三", 21, 162, "浙江"),
Student("张三", 27, 161, "广东"),
Student("张三", 34, 170, "广西"),
Student("张三", 32, 180, "四川"),
Student("张三", 8, 176, "福建"),
Student("张三", 12, 187, "河南")
)
//DSL
//扩展函数年龄小于多少岁
fun List<Student>.findAgeLessThan(age: Int) {
filter {
it.age < age
}.forEach(::println)
}
//中缀表达式infix 可以省略 . 或者 () 用空格代替
//扩展函数年龄大于多少岁
infix fun List<Student>.findAgeGreaterThan(age: Int) {
filter {
it.age > age
}.forEach(::println)
}
main函数
fun main() {
//maxBy
println("======maxBy 最大============")
println("年龄最大的学生=======${StudentDataBase.maxBy { it.age }}")
println("身高最高的学生=======${StudentDataBase.maxBy { it.height }}")
//minBy
println("======minBy 最小============")
println("年龄最小的学生=======${StudentDataBase.minBy { it.age }}")
println("身高最矮的学生=======${StudentDataBase.minBy { it.height }}")
//filter
println("======filter 过滤特定条件============")
println("过滤年龄大于18并且身高大于170的学生=======${StudentDataBase.filter {
(it.age>18) and (it.height>170)
}}")
//map
println("======map 把某个属性映射成新的集合============")
var mapResult= StudentDataBase.map {
"${it.name}:${it.age}"
}
println("将名字和年龄映射成一个新的集合${mapResult}")
//any
println("======any 是否满足某个条件============")
println("是否有年龄为18的学生:${StudentDataBase.any {
it.age==18
}}")
//count
println("======count 统计符合条件的个数============")
println("统计身高为163的个数:${StudentDataBase.count {
it.height==163
}}")
//find
println("======find 查找第一个符合条件的============")
println("查找第一个身高为163的学生:${StudentDataBase.find {
it.height==163
}}")
//groupBy
println("======groupBy 按照特征分为不同的组============")
var groupResult= StudentDataBase.groupBy {
it.address
}
println("按照籍贯进行分组:${groupResult}")
groupResult.get("山东")?.forEach { println(it) }
//扩展函数
println("======扩展函数==========")
//年龄小于xx岁
StudentDataBase.findAgeLessThan(15)
//中缀表达式 可以省略. 用空格代替
println("======中缀表达式==========")
//年龄大于xx岁
StudentDataBase findAgeGreaterThan 30
}
运行结果