網站首頁 編程語言 正文
1.函數式編程
我們都知道java是面向對象編程范式。在java的世界,一切皆對象。
函數式編程范式是有抽象數學的lambda演算發展而來,主要依賴高階函數返回的數據,這些高級函數專用于處理各種集合,可以方便的聯合多個函數構建鏈式操作,以創建復雜的計算行為。
所謂高級函數就是以函數為參數或返回值是函數的函數。這點,前面的文章,有過簡單介紹。
2.函數類別
一個函數式應用通常由這三大類組成,變化transform、過濾filter、合并combine。每類函數都針對集合數據類型設計,目標是產生一個最終結果。函數式編程用到的函數生來都是可以組合的。通過簡單函數的組合來實現復雜的計算。
3.變換函數(transform)
變換函數會遍歷集合內容,以值參的形式傳入變換器函數,變換每一個元素,然后返回包含已修改元素的集合,傳給鏈上的其他函數。最常用的兩個變換函數是map和flatMap
map函數:
1)map變換函數,遍歷集合沒一個元素,通過變換器,變換成新的元素,并存入新的集合,然后返回變換后的集合作為鏈上下一個函數的輸入。
2)map轉換函數轉換后的集合和集合,大小是一樣的,并且不會改變原集合的內容。
簡而言之,就是講一個就集合變換成一個新集合
示例:list集合經過map轉換器后,變成了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函數定義
1)調用者Iterable<T>是一個集合類型,集合元素是T類型,返回值是: List<R>,集合元素是R類型
2).map(transform: (T) -> R) map接收一個transform匿名函數,匿名函數的參數是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函數:
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.過濾函數(filter)
filter過濾函數接收一個predicate函數。如果predicate函數返回為true,受檢元素會添加到過濾后的新集合中,如果為fasle,則受檢元素就會被移除新集合。
通俗的講,就是講原集合按照過濾函數給定的條件,形成一個新的集合。
示例:在集合元素中,包含"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)
}
}
過濾偶數:
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
val newList = numbers.filter {
it % 2 == 0
}
newList.forEach {
println(it)
}
5.合并函數(combine)
zip函數:用來合并兩個集合,形成一個新的鍵值對的集合??梢园堰@個集合轉成一個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")
}
}
原文鏈接:https://blog.csdn.net/niuyongzhi/article/details/126669786
相關推薦
- 2022-11-10 golang?常用定時任務匯總_Golang
- 2022-11-14 Python中__init__.py文件的作用_python
- 2022-06-08 淺談C#多線程下的調優_C#教程
- 2022-07-02 使用numpy.mean()?計算矩陣均值方式_python
- 2022-04-16 C++中allocator類使用示例_C 語言
- 2022-03-30 C語言中循環語句練習實例_C 語言
- 2023-02-04 GO語言并發之好用的sync包詳解_Golang
- 2022-05-23 如何在Python?中使用?join()?函數把列表拼接成一個字符串_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支