美文网首页
高阶函数

高阶函数

作者: GaoXiaoGao | 来源:发表于2020-12-18 09:07 被阅读0次

1.forEach函数

-示例1

/**
 * 以下为自己定义的函数
 * (String> -> Unit 函数类型  参数为字符串  返回值是Unit
 */

 var print = fun  (name:String):Unit{
    println(name)
}

fun main(args:Array<String>) {

    var names = listOf<String>("tom","jerry","lucy")

    //1.forEach函数接收的是一个函数
    //forEach函数的定义如下
    /**
    @kotlin.internal.HidesMembers
    public inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit {
    for (element in this) action(element)
    }
     */
    //2. action 的作用是将每一个值传到函数中
    names.forEach(print) //print是一个函数
}

-示例2
可以在forEach后面直接写一个{} 括号中定义匿名函数,简化写法

fun main(args:Array<String>) {

    var names = listOf<String>("tom","jerry","lucy")

    //1.forEach函数接收的是一个函数
    //2. 可以在forEach后面直接写一个{} 括号中定义匿名函数
    names.forEach{
        a -> println(a)
    }
}

-示例3
forEach函数中默认有一个参数 it 可以直接使用

fun main(args:Array<String>) {

    var names = listOf<String>("tom","jerry","lucy")
    //1.forEach函数接收的是一个函数
    //2. 可以在forEach后面直接写一个{} 括号中定义匿名函数
    names.forEach{
        println(it)
    }
}

2.在kotlin中创建图片

import java.awt.image.BufferedImage
import java.io.File
import javax.imageio.ImageIO

fun main(args:Array<String>) {

    //在内存中创建宽高为100的图片
    var image = BufferedImage(100,100,BufferedImage.TYPE_INT_RGB)
    var w = 0.. 99; //图片的宽
    var h = 0.. 99;  //图片的高

    image.apply {

        for(i in w){
            for(j in h){
                setRGB(i,j,0xff0000)
            }
        }
    }

    //图片保存到文件中
    ImageIO.write(image,"bmp", File("a.bmp"))
}

3. maxBy函数

有以下数据

 var 选手数据库 = listOf<Girl>(
    Person("选手1",18,167,"山东"),
    Person("选手2",19,167,"广东"),
    Person("选手3",16,166,"湖南"),
    Person("选手4",17,167,"浙江"),
    Person("选手5",17,165,"四川"),
    Person("选手6",19,167,"山西"),
    Person("选手7",18,167,"陕西"),
    Person("选手8",15,165,"西藏"),
    Person("选手9",19,167,"河北"),
    Person("选手10",18,169,"甘肃")
)

-在kotlin中筛选出年龄最大的选手,使用函数maxBy

    //返回的是集合
    println(选手数据库.maxBy { it.age });

4. filter函数

-使用多个条件过滤选手,使用filter函数

    println(选手数据库.filter { (it.age>16) and (it.address=="山东") });

5. map函数

-从数据中按属性重新组成集合,使用map函数

//取出集合中 以age和address组成的新的集合并返回
println(选手数据库.map { "${it.age}: ${it.address}" });
//[18: 山东, 19: 广东, 16: 湖南, 17: 浙江, 17: 四川, 19: 山西, 18: 陕西]

6. any函数

-查看数据中是否有符合条件的数据,使用any函数

// any 返回Boolean 类型,查看数据中是否有符合条件的
println(选手数据库.any { it.age>16 });

7. count函数

-统计符合条件的数据量,使用count函数

  // count 返回个数,统计符合条件的数据
  println(选手数据库.count { it.age>16 });

8. find函数

-返回第 1 条符合条件的数据,使用find函数

 // find 返回第一条符合条件的数据
  println(选手数据库.find { it.age==16 });

9. groupBy 函数

-对数据进行分组并返回,使用groupBy 函数

   println(选手数据库.groupBy { it.address });
  //{山东=[Person(name=选手1, age=18, height=167, address=山东)], 广东=[Person(name=选手2, age=19, height=167, address=广东)]}

// 筛选某一组的人并打印   ?是有可能数据是空
   选手数据库.groupBy { it.address }.get("山东")?.forEach { println(it) }

10. DSL

-扩展函数
有以下数据及扩展的方法

data class Person(var name:String,var age:Int, var height:Int, var address:String)

//模拟选手信息
  var 选手数据库 = listOf<Person>(
    Person("选手1",18,167,"山东"),
    Person("选手2",19,167,"广东"),
    Person("选手3",16,166,"湖南"),
    Person("选手4",17,167,"浙江"),
    Person("选手5",17,165,"四川"),
    Person("选手6",19,167,"山西"),
    Person("选手7",18,167,"陕西"),
    Person("选手8",15,165,"西藏"),
    Person("选手9",19,167,"河北"),
    Person("选手10",18,169,"甘肃")
)

//扩展的方法
fun List<Person>.查找年龄小于17的(age: Int){
    filter { it.age < age }.forEach(::println)
}

调用的时候

   选手数据库.查找年龄小于17的(17)
   //输出结果
   Person(name=选手3, age=16, height=166, address=湖南)
   Person(name=选手8, age=15, height=165, address=西藏)

-采用中缀表达式 (infix 关键字),进一步简化

//采用中缀表达式简化
infix fun List<Person>.查找年龄小于16的(age: Int){
    filter { it.age < age }.forEach(::println)
}

调用的时候

//调用中缀表达式的函数,中间有空格分隔就可以调用
选手数据库 查找年龄小于16的 16

//输出结果
Person(name=选手8, age=15, height=165, address=西藏)

相关文章

  • python学习(三)函数式编程

    高阶函数 函数也是变量,函数参数为函数的函数,称作高阶函数 自定义高阶函数 内建高阶函数 map/reducema...

  • 11.Lambda和高阶函数(Lambda and Higher

    高阶函数 kotlin_Lambda,高阶函数 *swift_高阶函数

  • Python | 高阶函数基本应用及Decorator装饰器

    一、高阶函数 理解什么是高阶函数?以及高阶函数的基本应用方法 ▲ 高阶函数 在了解什么是高阶函数之前,我们来看几个...

  • 四、函数进阶

    一. 高阶函数 参数类型包含函数类型或返回值类型为函数类型的函数为高阶函数。 常见的高阶函数 高阶函数的调用 二....

  • Kotlin 高阶函数

    什么是高阶函数 将函数作为参数或者返回值的,称高阶函数。 定义高阶函数 action是一个高阶函数,(Int) -...

  • 高阶组件

    高阶组件 先来引入这个概念 高阶函数是什么? 高阶函数就是一个函数返回一个函数eg: 高阶组件 类同 高阶组件就是...

  • [JS函数] (Array)の高阶函数

    JS函数 高阶函数 高阶函数英文叫Higher-order function。那么什么是高阶函数? JavaScr...

  • HOC - High Order Component 高阶组件

    高阶函数 简而言之,可以接收函数作为参数的函数就是一个高阶函数。 上面的hoc函数就是一个高阶函数。 高阶组件 高...

  • Day10. 高阶组件

    1. 认识高阶函数 什么是高阶组件呢?认识高阶函数.png 高阶函数: 接收一个或多个函数作为输入, 输出一个函数...

  • Python高阶函数

    本文要点 1.什么是高阶函数 2.python中有哪些常用的高阶函数 什么是高阶函数? 在了解什么是高阶函数之前,...

网友评论

      本文标题:高阶函数

      本文链接:https://www.haomeiwen.com/subject/dxmzgktx.html