欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kotlin Lambda表達式實踐使用介紹

 更新時間:2022年12月01日 17:04:47   作者:z啵唧啵唧  
lambda 本質上是可以傳遞給函數(shù)的一小段代碼,Kotlin 與 Java 中的 Lambda 有一定的區(qū)別,除了對 lambda 的全面支持外,還有內聯(lián)函數(shù)等簡潔高效的特性。下面我們來仔細看一下

集合的創(chuàng)建和遍歷方式

  • 集合只要包含List和Set在寬泛一些就包括Map這種鍵值對類型的數(shù)據(jù)結構
  • List,Set和Map在java當中都是接口,其中List的主要實現(xiàn)類是ArrayList和LinkedList,Set的主要用的實現(xiàn)類是HashSet,Map主要用的實現(xiàn)類是HashMap
  • 現(xiàn)在我們要創(chuàng)建一個水果集合來放水果,在Kotlin當中可以這樣寫
val list = ArrayList<String>()
list.add("蘋果")
list.add("香蕉")
list.add("橘子")

這種初始化集合的方式比較繁瑣,在Kotlin當中給我們提供了一個listOf方法可以簡化集合的初始化

val list = listOf<String>("蘋果", "香蕉", "橘子")

使用Kotlin當中的for-in方法對集合進行遍歷

fun main() {
    val list = listOf<String>("蘋果", "香蕉", "橘子")
    for (fruit in list) {
        println(fruit)
    }
}

需要注意的是使用listOf方法初始化的集合是一種不可變的集合,意思就是使用listOf初始化的集合只能用來讀取不能用來添加,修改或者刪除

那么我們要是想要快速初始化一個集合,又想要可變可以使用mutableListOf方法進行初始化

fun main() {
    val list = mutableListOf<String>("蘋果", "香蕉", "橘子")
    list.add("哈密瓜")
    for (fruit in list) {
        println(fruit)
    }
}

Set集合地用戶幾乎和List一樣,只是將創(chuàng)建集合地方式換成了setOf和mutableSetOf

val set = setOf<String>("香蕉", "橘子", "蘋果")

set集合存放的元素是不可重復的

Map集合的用法在Kotlin當中也比較多,和java比較類似的是下面這一種

 val map = HashMap<String, Int>()
 map.put("香蕉", 1)
 map.put("西瓜", 2)

但是在Kotlin當中還有一種類似于數(shù)組下標的寫法

val map = HashMap<String, Int>()
map["香蕉"] = 1
map["西瓜"] = 2

而在map中讀取一條寫法

map.get("香蕉")
//或者還可以是這樣(推薦)
map["香蕉"]

當然上面這些都不是最簡單的寫法,在Kotlin當中給Map也提供了mapOf和mutableMapOf兩個函數(shù)進行快速的初始化

fun main() {
    val map = mapOf<String, Int>("香蕉" to 1, "西瓜" to 2)
    for ((fruit, number) in map) {
        println("fruit is " + fruit + "number is " + number)
    }
}

集合的函數(shù)式API

在一個水果集合當中,找到單詞最長那個水果

寫法一:

 val list = listOf<String>("Apple", "Banana", "Orange", "Pear")
 var maxLengthFruit = ""
 for (fruit in list) {
     if (fruit.length > maxLengthFruit.length) {
         maxLengthFruit = fruit
     }
 }
 println("max length fruit is " + maxLengthFruit)

寫法二:(使用函數(shù)式API寫法)

    val list = listOf<String>("Apple", "Banana", "Orange", "Pear")
    val maxLengthFruit = list.maxBy { it.length }
    println("max length fruit is " + maxLengthFruit)
  • 上面的代碼不易理解,下面一步步分析Lambda表達式的寫法
  • Lambda定義:就是一小段可以作為參數(shù)傳遞的代碼
  • Lambda表達式的語法結構體

{參數(shù)名1: 參數(shù)類型, 參數(shù)名2: 參數(shù)類型 -> 函數(shù)體}

  • 回到剛才找出最長單詞的水果的需求,其中maxBy就是一個普通的函數(shù)而已,只不過就是接收了一個Lambda類型的參數(shù),并且在遍歷的時候將每次遍歷的值傳遞給Lambda表達式,maxBy函數(shù)就是根據(jù)我們傳入的條件來遍歷集合,從而找到該條件下的最大值
  • 理解原理之后這個代碼就可以這樣寫了
    val list = listOf<String>("Apple", "Banana", "Orange", "Pear")
    //定義一個lambda表達式
    val lambda = {fruit: String -> fruit.length}
    //然后將這個lambda表達式作為參數(shù)傳遞給maxBy函數(shù),maxBy函數(shù)的作用就是遍歷集合,根據(jù)參數(shù)條件來找到最大值
    val maxLengthFruit = list.maxBy(lambda)
  • 但是上述寫法比較啰嗦麻煩,可以在此基礎上進行簡化操作
  • 首先不需要專門定義一個Lambda變量,而是可以直接將Lambda表達式傳入maxBy函數(shù)中
val maxLengthFruit = list.maxBy({<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->fruit: String -> fruit.length})
  • 然后在Kotlin當中規(guī)定當Lambda表達式是函數(shù)最后一個參數(shù)的時候,可以將Lambda表達式一道函數(shù)括號外面
val maxLengthFruit = list.maxBy(){<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->fruit: String -> fruit.length}
  • 如果當lambda參數(shù)是函數(shù)唯一一個參數(shù)的時候,函數(shù)的括號可以省略
val maxLengthFruit = list.maxBy{<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->fruit: String -> fruit.length}
  • 然后在Kotlin當中擁有優(yōu)秀的推到機制,Lambda表達式中的參數(shù)列表在大多數(shù)的情況下沒必要聲明參數(shù)的類型,因此可以進一步簡化成為
val maxLengthFruit = list.maxBy{<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->fruit -> fruit.length}
  • 最后在Lambda中當參數(shù)列表只有一個參數(shù)的時候,也不必要聲明參數(shù)名,而是直接使用it關鍵字代替即可,那么代碼就變成了
val maxLenght = list.maxBy{<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->it.length}
  • 集合當中的map函數(shù)是比較常用的一種函數(shù)式API,它將用于集合中每個元素都映射成為一個另外的值,映射的規(guī)則在Lambda表達式中進行指定
  • 將單詞都轉換成為大寫字母
    val list = listOf<String>("Apple", "Banana")
    val newList = list.map { it.toUpperCase() }
    for (fruit in newList) {
        println(fruit)
    }
  • map函數(shù)的功能十分的強大,可以按照我們的需求對集合中的元素進行任意的映射轉換
  • filter函數(shù):是用來過濾集合當中數(shù)據(jù)的,可以單獨使用,也可以和map函數(shù)配合在一起進行使用
  • 比如我們想保留5個字母以內的水果,并且將字母全部轉換成為大寫字母
val list = listOf<String>("Apple", "Banana", "Orange", "Pear", "Grape")
val newList = list.filter { it.length <= 5 }
    .map { it.toUpperCase() }
for (fruit in newList) {
    println(fruit)
}
  • any函數(shù)和all函數(shù)
  • any函數(shù)用于判斷集合中是否至少存在一個元素滿足指定條件,all函數(shù)用于判斷集合中是否所有元素都滿足指定的條件
val list = listOf<String>("Apple", "Banana", "Orange", "Pear", "Grape")
val anyResult = list.any {it.length <= 5}
val allResult = list.all { it.length <= 5 }
println("anyResult is" + anyResult + ", allResult is" + allResult)

到此這篇關于Kotlin Lambda表達式實踐使用介紹的文章就介紹到這了,更多相關Kotlin Lambda內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論