亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1.函數(shù)式編程

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

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

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

2.函數(shù)類(lèi)別

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

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

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

map函數(shù):

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

2)map轉(zhuǎn)換函數(shù)轉(zhuǎn)換后的集合和集合,大小是一樣的,并且不會(huì)改變?cè)系膬?nèi)容。

簡(jiǎn)而言之,就是講一個(gè)就集合變換成一個(gè)新集合

示例:list集合經(jīng)過(guò)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>是一個(gè)集合類(lèi)型,集合元素是T類(lèi)型,返回值是: List<R>,集合元素是R類(lèi)型

2).map(transform: (T) -> R) map接收一個(gè)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操作的是集合的集合,將多個(gè)集合中的元素合并后,返回一個(gè)包含所有元素的集合。

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.過(guò)濾函數(shù)(filter)

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

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

示例:在集合元素中,包含"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)
    }
}

過(guò)濾偶數(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ù):用來(lái)合并兩個(gè)集合,形成一個(gè)新的鍵值對(duì)的集合??梢园堰@個(gè)集合轉(zhuǎn)成一個(gè)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ù)式編程超詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Kotlin函數(shù)式編程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • listview 選中高亮顯示實(shí)現(xiàn)方法

    listview 選中高亮顯示實(shí)現(xiàn)方法

    當(dāng)點(diǎn)擊左側(cè)ListView后,選中的一行就會(huì)一直呈高亮狀態(tài)顯示,圖中選中行字的顏色顯示為藍(lán)色(注意:是選中行后一直高亮,而不是只是點(diǎn)擊時(shí)高亮),如果再次點(diǎn)擊另外的一行, 則新的那一行就高亮,下面就來(lái)實(shí)現(xiàn)這個(gè)高亮效果的顯示
    2012-11-11
  • Android依據(jù)名字通過(guò)反射獲取在drawable中的圖片

    Android依據(jù)名字通過(guò)反射獲取在drawable中的圖片

    依據(jù)圖片的名字,通過(guò)反射獲取其在drawable中的ID,在根據(jù)此ID顯示圖片,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈
    2013-06-06
  • Android上下文菜單用法實(shí)例分析

    Android上下文菜單用法實(shí)例分析

    這篇文章主要介紹了Android上下文菜單用法,以完整實(shí)例形式分析了Android上下文菜單的定義、布局及功能實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • Flutter圖片緩存管理ImageCache原理分析

    Flutter圖片緩存管理ImageCache原理分析

    這篇文章主要為大家介紹了Flutter圖片緩存管理ImageCache原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 分享Android中ExpandableListView控件使用教程

    分享Android中ExpandableListView控件使用教程

    這篇文章主要介紹了Android中ExpandableListView控件使用教程,可以實(shí)現(xiàn)二級(jí)列表展示效果,需要的朋友可以參考下
    2015-12-12
  • Android系統(tǒng)工具類(lèi)詳解

    Android系統(tǒng)工具類(lèi)詳解

    這篇文章主要為大家詳細(xì)介紹了Android系統(tǒng)工具類(lèi)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Android Studio 中獲取屏幕寬度實(shí)例

    Android Studio 中獲取屏幕寬度實(shí)例

    這篇文章主要介紹了Android Studio 中獲取屏幕寬度實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • Android自定義控件實(shí)現(xiàn)九宮格解鎖功能

    Android自定義控件實(shí)現(xiàn)九宮格解鎖功能

    這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)九宮格解鎖功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Android解析服務(wù)器端發(fā)來(lái)的xml數(shù)據(jù)示例

    Android解析服務(wù)器端發(fā)來(lái)的xml數(shù)據(jù)示例

    Android跟服務(wù)器交互數(shù)據(jù),有時(shí)數(shù)據(jù)量大時(shí),就需要以xml形式的交互數(shù)據(jù),下面與大家分享下使用XmlPullParser來(lái)解析xml數(shù)據(jù),感興趣的朋友可以參考下哈
    2013-06-06
  • android創(chuàng)建optionsmenu的方法

    android創(chuàng)建optionsmenu的方法

    這篇文章主要介紹了android創(chuàng)建optionsmenu的方法,實(shí)例分析了Android菜單項(xiàng)的設(shè)置與創(chuàng)建技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07

最新評(píng)論