最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin函數(shù)式編程超詳細介紹

 更新時間:2022年09月06日 08:31:15   作者:niuyongzhi  
一個函數(shù)式應(yīng)用通常由三大類函數(shù)構(gòu)成:變換transform、過濾filters合并combineo每類函數(shù)都針對集合數(shù)據(jù)類型設(shè)計,目標是產(chǎn)生一個最終結(jié)果。函數(shù)式編程用到的函數(shù)生來都是可組合的,也就是說,你可以組合多個簡單函數(shù)來構(gòu)建復(fù)雜的計算行為

1.函數(shù)式編程

我們都知道java是面向?qū)ο缶幊谭妒?。在java的世界,一切皆對象。

函數(shù)式編程范式是有抽象數(shù)學(xué)的lambda演算發(fā)展而來,主要依賴高階函數(shù)返回的數(shù)據(jù),這些高級函數(shù)專用于處理各種集合,可以方便的聯(lián)合多個函數(shù)構(gòu)建鏈式操作,以創(chuàng)建復(fù)雜的計算行為。

所謂高級函數(shù)就是以函數(shù)為參數(shù)或返回值是函數(shù)的函數(shù)。這點,前面的文章,有過簡單介紹。

2.函數(shù)類別

一個函數(shù)式應(yīng)用通常由這三大類組成,變化transform、過濾filter、合并combine。每類函數(shù)都針對集合數(shù)據(jù)類型設(shè)計,目標是產(chǎn)生一個最終結(jié)果。函數(shù)式編程用到的函數(shù)生來都是可以組合的。通過簡單函數(shù)的組合來實現(xiàn)復(fù)雜的計算。

3.變換函數(shù)(transform)

變換函數(shù)會遍歷集合內(nèi)容,以值參的形式傳入變換器函數(shù),變換每一個元素,然后返回包含已修改元素的集合,傳給鏈上的其他函數(shù)。最常用的兩個變換函數(shù)是map和flatMap

map函數(shù):

1)map變換函數(shù),遍歷集合沒一個元素,通過變換器,變換成新的元素,并存入新的集合,然后返回變換后的集合作為鏈上下一個函數(shù)的輸入。

2)map轉(zhuǎn)換函數(shù)轉(zhuǎn)換后的集合和集合,大小是一樣的,并且不會改變原集合的內(nèi)容。

簡而言之,就是講一個就集合變換成一個新集合

示例:list集合經(jīng)過map轉(zhuǎn)換器后,變成了Fruit集合

fun main() {
    val list = listOf("Apple","Banana","pear")
    val fruits = list.map {
        Fruit(it)
    }
    list.forEach { println(it) }
    fruits.forEach {
        println(it.name)
    }
}

map函數(shù)定義

1)調(diào)用者Iterable<T>是一個集合類型,集合元素是T類型,返回值是: List<R>,集合元素是R類型

2).map(transform: (T) -> R) map接收一個transform匿名函數(shù),匿名函數(shù)的參數(shù)是T,返回值是R

public inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {
    return mapTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)
}
public inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.mapTo(destination: C, transform: (T) -> R): C {
    for (item in this)
        destination.add(transform(item))
    return destination
}

flatMap函數(shù):

flatMap操作的是集合的集合,將多個集合中的元素合并后,返回一個包含所有元素的集合。

fun main() {
    val list = listOf("Apple","Banana","pear")
    val list2 = listOf("orange","watermelon","lemon")
    val newFruit = listOf(list,list2).flatMap { it }.map {
        Fruit(it)
    }
    newFruit.forEach {
        println(it)
    }
}

4.過濾函數(shù)(filter)

filter過濾函數(shù)接收一個predicate函數(shù)。如果predicate函數(shù)返回為true,受檢元素會添加到過濾后的新集合中,如果為fasle,則受檢元素就會被移除新集合。

通俗的講,就是講原集合按照過濾函數(shù)給定的條件,形成一個新的集合。

示例:在集合元素中,包含"a"的元素,形成新的集合。

fun main() {
    val list = listOf("Apple","Banana","pear")
    val newList = list.filter { it.contains("a") }
    newList.forEach {
        println(it)
    }
}

flat和filter配合使用示例:

fun main() {
    val list = listOf("Apple","Banana","pear")
    val list2 = listOf("orange","watermelon","lemon")
    val newFruit = listOf(list,list2).flatMap { it }.map {
        Fruit(it)
    }.filter {
        it.name.contains("a")
    }
    newFruit.forEach {
        println(it)
    }
}

過濾偶數(shù):

 val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
    val newList = numbers.filter {
        it % 2 == 0
    }
    newList.forEach {
        println(it)
    }

5.合并函數(shù)(combine)

zip函數(shù):用來合并兩個集合,形成一個新的鍵值對的集合。可以把這個集合轉(zhuǎn)成一個map集合

fun main() {
    val list = listOf("Apple", "Banana", "pear")
    val list2 = listOf("orange", "watermelon", "lemon")
    val numbers = listOf(0,1, 2, 3, 4, 5)
    val newFruit =  numbers.zip( listOf(list, list2).flatMap { it } ).toMap()
        newFruit.forEach { index, value ->
        println("$index:$value")
    }
}

到此這篇關(guān)于Kotlin函數(shù)式編程超詳細介紹的文章就介紹到這了,更多相關(guān)Kotlin函數(shù)式編程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Kotlin可見性修飾符詳解

    Kotlin可見性修飾符詳解

    本文詳細講解了Kotlin可見性修飾符,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • 基于Android ListView之加載使用技巧

    基于Android ListView之加載使用技巧

    本篇文章小編為大家介紹,基于Android ListView之加載使用技巧。需要的朋友參考下
    2013-04-04
  • Android6.0動態(tài)申請權(quán)限所遇到的問題小結(jié)

    Android6.0動態(tài)申請權(quán)限所遇到的問題小結(jié)

    這篇文章給大家介紹了Android6.0動態(tài)申請權(quán)限所遇到的問題,在沒給大家介紹這下問題之前,先給大家說下基本定義和基本使用方式,本文給大家介紹的非常詳細,具有參考借鑒價值,對android 6.0 動態(tài)權(quán)限遇到問題感興趣的朋友一起看看吧
    2016-11-11
  • Android?JetPack組件的支持庫Databinding詳解

    Android?JetPack組件的支持庫Databinding詳解

    DataBinding是Google發(fā)布的一個數(shù)據(jù)綁定框架,它能夠讓開發(fā)者減少重復(fù)性非常高的代碼,如findViewById這樣的操作。其核心優(yōu)勢是解決了數(shù)據(jù)分解映射到各個view的問題,在MVVM框架中,實現(xiàn)的View和Viewmode的雙向數(shù)據(jù)綁定
    2022-08-08
  • Android App將數(shù)據(jù)寫入內(nèi)部存儲和外部存儲的示例

    Android App將數(shù)據(jù)寫入內(nèi)部存儲和外部存儲的示例

    這篇文章主要介紹了Android App將數(shù)據(jù)寫入內(nèi)部存儲和外部存儲的示例,使用外部存儲即訪問并寫入SD卡,需要的朋友可以參考下
    2016-03-03
  • Android自動獲取輸入短信驗證碼庫AutoVerifyCode詳解

    Android自動獲取輸入短信驗證碼庫AutoVerifyCode詳解

    這篇文章主要為大家詳細介紹了Android自動獲取輸入短信驗證碼庫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 如何使用SurfaceView實現(xiàn)魚兒游動動畫

    如何使用SurfaceView實現(xiàn)魚兒游動動畫

    這篇文章主要教大家如何使用SurfaceView實現(xiàn)魚兒游動動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Android矢量圖之VectorDrawable類自由填充色彩

    Android矢量圖之VectorDrawable類自由填充色彩

    這篇文章主要介紹了Android矢量圖之VectorDrawable類自由填充色彩的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android短信驗證碼自動填寫實現(xiàn)代碼

    Android短信驗證碼自動填寫實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了Android短信驗證碼自動填寫實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android 路徑查詢具體實現(xiàn)

    Android 路徑查詢具體實現(xiàn)

    可以通過RasterMap的getDirection()方法來查詢路徑,和查詢地址類似,路徑查詢的結(jié)果也是通過回調(diào)函數(shù)的方式來通知應(yīng)用程序的,下面的例子返回南京到北京的路徑
    2013-10-10

最新評論

沾益县| 前郭尔| 白城市| 改则县| 曲周县| 沙雅县| 石城县| 石阡县| 噶尔县| 重庆市| 含山县| 广水市| 潞城市| 无为县| 南京市| 文山县| 德化县| 施秉县| 静宁县| 上犹县| 汉寿县| 台州市| 曲周县| 射阳县| 临江市| 吴桥县| 茶陵县| 北川| 锦屏县| 襄汾县| 涡阳县| 河津市| 普兰县| 靖远县| 海丰县| 牟定县| 托克托县| 广宗县| 景洪市| 天峨县| 蛟河市|