Skip to content
Able Blog
Home
Others
  • Home
      • 学习笔记
          • Android
            • 简历_赵思琦_Android_5年经验
                • Kotlin
                    • HandFirstKotlin程序设计
                      • 01. 快速入门
                        • 02. 基本类型和变量:关于变量
                          • 03. 函数
                            • 04. 类和对象
                              • 05. 子类和父类
                                • 06. 抽象和接口
                                  • 07. 数据类
                                    • 08. 空值和异常
                                      • 09. 集合
                                        • 10. 泛型
                                          • 11. Lambda和高阶函数
                                            • 12. 内置高阶函数
                                              • 1. 获取最大值和最小值
                                                • 1.1 处理基础类型 min/max
                                                  • 1.2 处理所有类型最大值,最小值(minBy,maxBy)
                                                  • 2. 求和(sumof)
                                                    • 3. 转换集合(map)
                                                      • 4. fliter
                                                        • 5. 分组(groupBy)
                                                          • 6. fold
                                                            • 6.1 递增
                                                              • 6.2 字符串连接-依次执行
                                                                • 从右向左就是foldRight
                                                              • 12. 协程

                                                        12. 内置高阶函数

                                                        author iconAblecalendar icon2022年5月19日category icon
                                                        • Kotlin
                                                        tag icon
                                                        • 学习笔记
                                                        word icon约 584 字

                                                        此页内容
                                                        • 1. 获取最大值和最小值
                                                          • 1.1 处理基础类型 min/max
                                                          • 1.2 处理所有类型最大值,最小值(minBy,maxBy)
                                                        • 2. 求和(sumof)
                                                        • 3. 转换集合(map)
                                                        • 4. fliter
                                                        • 5. 分组(groupBy)
                                                        • 6. fold
                                                          • 6.1 递增
                                                          • 6.2 字符串连接-依次执行
                                                          • 从右向左就是foldRight

                                                        # 12. 内置高阶函数

                                                        # 1. 获取最大值和最小值

                                                        # 1.1 处理基础类型 min/max

                                                        minOrNull和maxOrNull

                                                            val array = arrayOf(4, 3, 65, 34, 1)
                                                            array.minOrNull()
                                                            array.minOrNull()
                                                            val list = listOf(5, 321, 4, 2, 5, 123, 4)
                                                            val minOrNull = list.minOrNull()
                                                            val maxOrNull = list.maxOrNull()
                                                            println(minOrNull)
                                                            println(maxOrNull)
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8

                                                        # 1.2 处理所有类型最大值,最小值(minBy,maxBy)

                                                        根据对象的属性,找出对应的集合中的元素

                                                        数据类

                                                        data class People(val name: String = "测试", val age: Double)
                                                        
                                                        1
                                                            val data = listOf(
                                                                People("赵", 5),
                                                                People("钱", 3),
                                                                People("孙", 51),
                                                                People("李", 54)
                                                            )
                                                            val minByOrNull = data.minByOrNull { it.name }
                                                            val maxByOrNull = data.maxByOrNull { it.name }
                                                            println(minByOrNull)
                                                            println(maxByOrNull)
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8
                                                        9
                                                        10

                                                        # 2. 求和(sumof)

                                                          val data = listOf(
                                                                People("赵", 5.0),
                                                                People("钱", 3.0),
                                                                People("孙", 51.0),
                                                                People("李", 54.0)
                                                            )
                                                            val minByOrNull = data.sumOf { it.age }
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7

                                                        # 3. 转换集合(map)

                                                        根据lambda表达式,返回对应的集合

                                                            val data = listOf(
                                                                People("赵", 5.0),
                                                                People("钱", 3.0),
                                                                People("孙", 51.0),
                                                                People("李", 54.0)
                                                            )
                                                            val minByOrNull:List<Double> = data.map { it.age }
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7

                                                        # 4. fliter

                                                        根据表达式条件转换集合

                                                           val data = listOf(
                                                                People("赵", 5.0),
                                                                People("钱", 3.0),
                                                                People("孙", 51.0),
                                                                People("李", 54.0)
                                                            )
                                                            val minByOrNull:List<Double> = data.map { it.age }.filter { it<10 }
                                                            minByOrNull.forEach { println(it) }
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8

                                                        # 5. 分组(groupBy)

                                                        根据元素中的属性的值分组

                                                            val data = listOf(
                                                                People("赵", 5.0),
                                                                People("钱", 5.0),
                                                                People("孙", 51.0),
                                                                People("李", 54.0)
                                                            )
                                                            val minByOrNull:Map<Double,List<People>> = data.groupBy { it.age }
                                                            minByOrNull.forEach { println(it) }
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8

                                                        # 6. fold

                                                        指定一个初始值,让集合中的每个元素对它执行操作。

                                                        操作的参数有两个,累计值和集合元素。

                                                        可以做递增,递减,字符串连接,初始值减去元素的总和等。

                                                        # 6.1 递增

                                                        val data = listOf(
                                                                People("赵", 5),
                                                                People("钱", 5),
                                                                People("孙", 51),
                                                                People("李", 54)
                                                            )
                                                            val fold = data.fold(0) { run,item  ->
                                                                println(run+item.age)
                                                                run+item.age
                                                              }
                                                            println(fold)
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8
                                                        9
                                                        10
                                                        11

                                                        可以看出,每次输入的值都在依次改变

                                                        # 6.2 字符串连接-依次执行

                                                        # fold

                                                        val data = listOf(
                                                                People("赵", 5),
                                                                People("钱", 5),
                                                                People("孙", 51),
                                                                People("李", 54)
                                                            )
                                                            val fold = data.fold("") { run,item  ->
                                                                run+"姓氏:"+item.name+" 年龄:"+item.age+"\n"
                                                              }
                                                            println(fold)
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8
                                                        9
                                                        10

                                                        # 从右向左就是foldRight

                                                        # reduce

                                                        reduce用法和fold类似,reduce第一步将第一个元素和第二个元素作为第一步的操作参数。

                                                           val data = listOf(
                                                                People("赵", 5),
                                                                People("钱", 5),
                                                                People("孙", 51),
                                                                People("李", 54)
                                                            )
                                                            val fold = data.reduce {sum, element ->
                                                                println(sum.age+element.age)
                                                                element
                                                              }
                                                            println(fold)
                                                        
                                                        1
                                                        2
                                                        3
                                                        4
                                                        5
                                                        6
                                                        7
                                                        8
                                                        9
                                                        10
                                                        11

                                                        输出

                                                        10
                                                        56
                                                        105
                                                        People(name=李, age=54)
                                                        
                                                        1
                                                        2
                                                        3
                                                        4

                                                        reduce只能返回集合的元素的类型

                                                        edit icon编辑此页open in new window
                                                        上次编辑于: 2022/5/20 06:29:46
                                                        贡献者: zsqan
                                                        上一页
                                                        11. Lambda和高阶函数
                                                        下一页
                                                        12. 协程
                                                        默认页脚
                                                        Copyright © 2022 Able