Kotlin-高階函數(shù)(2019-01-16)

高階函數(shù)

高階函數(shù)可以將函數(shù)作為參數(shù)或者是返回值

  • forEach
    提供遍歷集合的功能,forEach其實是IntArray類的擴展方法,它接受一個(Int)-> Unit的lambda表達式并且使用for循環(huán)對集合中的每個對象都做action操作。
  • map
    通常用于集合的映射
    val oldList = listOf(1, 2, 3, 4, 5)
    val newList = ArrayList<Int>()
    //遍歷并處理數(shù)據(jù)源的每一條數(shù)據(jù)
    val newList1 = oldList.map {
      it * 2 + 3
    }
    //還可用于集合的轉(zhuǎn)換
    val newList2 = oldList.map(Int::toDouble)
    
  • flatMap
    通常用于扁平化集合,是一種支持二維集合映射的高階函數(shù)
    val list = listOf(
          1..20,
          2..5,
          3..4
    )
    val newList3 = list.flatMap {
        it
    }
    //結(jié)合map進行一些數(shù)據(jù)的變換
    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
    用于過濾數(shù)據(jù)集合
    val newList5 = oldList.filter {
      //過濾條件
      it == 2 || it == 4
    }
    
  • takeWhile
    用于帶有條件的循環(huán)遍歷
    val res = oldList.takeWhile {
      //當元素等于2的時候結(jié)束循環(huán)
      it != 2
    }
    
  • let,apply,with
    簡化代碼,直接可以在lambda函數(shù)中使用對象的屬性和方法
     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是針對那些實現(xiàn)了Closable接口的對象的擴展方法,也就是大部分的IO操作相關(guān)類會有這個擴展高階方法
    在try中調(diào)用block針對Closable對象的操作,如果發(fā)生了異常會記錄并拋出異常,finlly中不管有沒有出異常都會自動做關(guān)閉操作,避免了IO處理的try..catch..finally樣板代碼。
    val file = File("test.txt")
    val bufferReader = BufferedReader(FileReader(file))
    bufferReader.use {
        it.readLine()
    }
    

本文僅作為個人學習記錄
參考文章:簡Kotlin 之旅5

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容