Kotlin函數(shù)式編程超詳細(xì)介紹
1.函數(shù)式編程
我們都知道java是面向?qū)ο缶幊谭妒健T趈ava的世界,一切皆對象。
函數(shù)式編程范式是有抽象數(shù)學(xué)的lambda演算發(fā)展而來,主要依賴高階函數(shù)返回的數(shù)據(jù),這些高級函數(shù)專用于處理各種集合,可以方便的聯(lián)合多個函數(shù)構(gòu)建鏈?zhǔn)讲僮?,以?chuàng)建復(fù)雜的計算行為。
所謂高級函數(shù)就是以函數(shù)為參數(shù)或返回值是函數(shù)的函數(shù)。這點,前面的文章,有過簡單介紹。
2.函數(shù)類別
一個函數(shù)式應(yīng)用通常由這三大類組成,變化transform、過濾filter、合并combine。每類函數(shù)都針對集合數(shù)據(jù)類型設(shè)計,目標(biāo)是產(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ù)式編程超詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Kotlin函數(shù)式編程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android依據(jù)名字通過反射獲取在drawable中的圖片
依據(jù)圖片的名字,通過反射獲取其在drawable中的ID,在根據(jù)此ID顯示圖片,具體實現(xiàn)如下,感興趣的朋友可以參考下哈2013-06-06分享Android中ExpandableListView控件使用教程
這篇文章主要介紹了Android中ExpandableListView控件使用教程,可以實現(xiàn)二級列表展示效果,需要的朋友可以參考下2015-12-12Android解析服務(wù)器端發(fā)來的xml數(shù)據(jù)示例
Android跟服務(wù)器交互數(shù)據(jù),有時數(shù)據(jù)量大時,就需要以xml形式的交互數(shù)據(jù),下面與大家分享下使用XmlPullParser來解析xml數(shù)據(jù),感興趣的朋友可以參考下哈2013-06-06android創(chuàng)建optionsmenu的方法
這篇文章主要介紹了android創(chuàng)建optionsmenu的方法,實例分析了Android菜單項的設(shè)置與創(chuàng)建技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07