Kotlin系列之filter、find、any、map、flatMap、takeWhile、reduce、groupBy常见高阶函数

高阶函数:filter

是一个过滤器,能够通过各种条件过滤出符合该条件的数据。

val numbers1 = listOf<Int>(213, 4, 534, 646, 757, 8, 97, 9);
var result = numbers1.filter { 
    it < 10
}

结果:4,8,9

高阶函数:any

val numbers1 = listOf<String>("123", "田园犬", "345", "收到");
  println(numbers1.any{it.kind=="田园犬"}) 
  结果:true

高阶函数:maxByOrNull

求最大值

val numbers2 = listOf<Int>(213, 4, 534, 646, 757, 8, 97, 9);
numbers2.maxByOrNull { it }
结果:757 (最大值)

高阶函数:minByOrNull

求最小值

val numbers2 = listOf<Int>(213, 4, 534, 646, 757, 8, 97, 9);
numbers2.minByOrNull { it }
结果:4(最小值)

高阶函数:map

将一个集合遍历,之后按照你自己的规则生成新的集合。

val arr = intArrayOf(1, 2, 4, 6)
val newArr = arr.map { (it * 2).toString()  }
结果:2,4,8,12

val newArr1 = arr.map {
    if (it == 2) {
        it * 2
    }
}
结果:1,4,4,6

高阶函数:flatMap

遍历嵌套的集合,生成新的集合.

val list = mutableListOf(
    arrayOf("华晨宇", "张碧晨", "邓紫棋"),
    arrayOf("何老师", "汪涵"),
    arrayOf("谢娜", "张杰", "汪诗诗"),
)
val flatList = list.flatMap {
    it.map { name -> "大明星:$name" }
}
flatList.forEach(::println)

高阶函数:reduce

将所提供的操作应用于集合元素并返回积累的结果
从第一个元素开始累加值,并将操作从左到右应用到当前累加器值和每个元素。

val list = listOf(1, 2, 5, 2)
list.reduce { acc, i ->
    println("acc:$acc,i:$i")
    acc + i
}

高阶函数:fold

这个函数和reduce类似,不过它可以设置一个初始值

val list = listOf(1, 2, 5, 2)
list.fold(2) { acc, i ->  //初始值为2
    println("acc:$acc,i:$i")
    acc + i
}

高阶函数:joinToString

val result = (0..6).joinToString(",")
println("result:$result")
结果: "0,1,2,3,4,5,6"

val number = listOf("one", "two", "three", "four")
number.joinToString(separator = " | ", prefix = "start:", postfix = ":end")
结果:start:one|two|three|four|:end

高阶函数:takeWhile

遇到第一个不符合条件的就结束,留下前边的作为一个新的集合返回.

val list = listOf(
    UserEntity(100, "华晨宇", 30),
    UserEntity(101, "张碧晨", 31),
    UserEntity(103, "邓紫棋", 29),
    UserEntity(103, "李宇春", 32),
)
val result = list.takeWhile {
    it.age >= 30
}
println("result:$result")
result:[userName:华晨宇,userId:100,age:30, userName:张碧晨,userId:101,age:31]

高阶函数:count

计算列表中符合条件的元素的数量

val len1 = "Meng qingLong".count()
val len2 = "Meng qingLong".count(){   //计算字符串中符合'n'的数量
    it == 'n'
}

高阶函数:find

查找符合条件并返回第一个符合该条件的数据。他跟filter的区别就是。filter返回的是结果集合。而find是找到第一个就返回。

val listOf = listOf<String>("a", "b", "c")
val find: String? = listOf.find { it == "a" }
//找到"a" 就返回了当前的String类型的"a"

高阶函数:groupBy

分组。即根据条件把集合拆分为为一个Map<K,List>类型的集合

fun main(string: Array<String>) {
    val s = listOf("china","beijing","wuhan","guangzhou","Changsha","wuhu")
    val n1 = s.groupBy {
        //按照首字母大写进行分组操作
        it.first().uppercase()   
        //返回成Map的Key。  满足条件的元素相应的进入Map集合中的Value,List列表中
    }
    println(n1)
}
//输出
{C=[china, Changsha], B=[beijing], W=[wuhan, wuhu], G=[guangzhou]}
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/21928,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?