美文网首页
Kotlin-高阶函数(2019-01-16)

Kotlin-高阶函数(2019-01-16)

作者: Guow110 | 来源:发表于2019-01-16 11:28 被阅读8次

    高阶函数

    高阶函数可以将函数作为参数或者是返回值

    • forEach
      提供遍历集合的功能,forEach其实是IntArray类的扩展方法,它接受一个(Int)-> Unit的lambda表达式并且使用for循环对集合中的每个对象都做action操作。
    • map
      通常用于集合的映射
      val oldList = listOf(1, 2, 3, 4, 5)
      val newList = ArrayList<Int>()
      //遍历并处理数据源的每一条数据
      val newList1 = oldList.map {
        it * 2 + 3
      }
      //还可用于集合的转换
      val newList2 = oldList.map(Int::toDouble)
      
    • flatMap
      通常用于扁平化集合,是一种支持二维集合映射的高阶函数
      val list = listOf(
            1..20,
            2..5,
            3..4
      )
      val newList3 = list.flatMap {
          it
      }
      //结合map进行一些数据的变换
      val newList4 = list.flatMap {
        it.map {
            "NO.$it"
        }
      }
      
    • reduce
      通常用于求和
      var sum = oldList.reduce { acc, i -> acc + i }
      
    • fold
      用于求和并加上一个初始值
      sum = (1..5).fold(5) { acc, i -> acc + i }
      
    • filter
      用于过滤数据集合
      val newList5 = oldList.filter {
        //过滤条件
        it == 2 || it == 4
      }
      
    • takeWhile
      用于带有条件的循环遍历
      val res = oldList.takeWhile {
        //当元素等于2的时候结束循环
        it != 2
      }
      
    • let,apply,with
      简化代码,直接可以在lambda函数中使用对象的属性和方法
       p?.let {
            println(it.name)
            println(it.age)
            it.work()
        }
      //---------------
       p?.apply {
            println(name)
            println(age)
            work()
        }
      //-------------------
      with(BufferedReader(FileReader("test.txt"))) {
        var line: String?
        while (true) {
            line = readLine() ?: break
            println(line)
        }
        close()
      }
      
      
    • use
      use是针对那些实现了Closable接口的对象的扩展方法,也就是大部分的IO操作相关类会有这个扩展高阶方法
      在try中调用block针对Closable对象的操作,如果发生了异常会记录并抛出异常,finlly中不管有没有出异常都会自动做关闭操作,避免了IO处理的try..catch..finally样板代码。
      val file = File("test.txt")
      val bufferReader = BufferedReader(FileReader(file))
      bufferReader.use {
          it.readLine()
      }
      

    本文仅作为个人学习记录
    参考文章:简Kotlin 之旅5

    相关文章

      网友评论

          本文标题:Kotlin-高阶函数(2019-01-16)

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