Kotlin Lambda表達(dá)式實(shí)踐使用介紹
集合的創(chuàng)建和遍歷方式
- 集合只要包含List和Set在寬泛一些就包括Map這種鍵值對(duì)類型的數(shù)據(jù)結(jié)構(gòu)
- List,Set和Map在java當(dāng)中都是接口,其中List的主要實(shí)現(xiàn)類是ArrayList和LinkedList,Set的主要用的實(shí)現(xiàn)類是HashSet,Map主要用的實(shí)現(xiàn)類是HashMap
- 現(xiàn)在我們要?jiǎng)?chuàng)建一個(gè)水果集合來放水果,在Kotlin當(dāng)中可以這樣寫
val list = ArrayList<String>()
list.add("蘋果")
list.add("香蕉")
list.add("橘子")
這種初始化集合的方式比較繁瑣,在Kotlin當(dāng)中給我們提供了一個(gè)listOf方法可以簡(jiǎn)化集合的初始化
val list = listOf<String>("蘋果", "香蕉", "橘子")使用Kotlin當(dāng)中的for-in方法對(duì)集合進(jìn)行遍歷
fun main() {
val list = listOf<String>("蘋果", "香蕉", "橘子")
for (fruit in list) {
println(fruit)
}
}需要注意的是使用listOf方法初始化的集合是一種不可變的集合,意思就是使用listOf初始化的集合只能用來讀取不能用來添加,修改或者刪除
那么我們要是想要快速初始化一個(gè)集合,又想要可變可以使用mutableListOf方法進(jìn)行初始化
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集合存放的元素是不可重復(fù)的
Map集合的用法在Kotlin當(dāng)中也比較多,和java比較類似的是下面這一種
val map = HashMap<String, Int>()
map.put("香蕉", 1)
map.put("西瓜", 2)
但是在Kotlin當(dāng)中還有一種類似于數(shù)組下標(biāo)的寫法
val map = HashMap<String, Int>() map["香蕉"] = 1 map["西瓜"] = 2
而在map中讀取一條寫法
map.get("香蕉")
//或者還可以是這樣(推薦)
map["香蕉"]
當(dāng)然上面這些都不是最簡(jiǎn)單的寫法,在Kotlin當(dāng)中給Map也提供了mapOf和mutableMapOf兩個(gè)函數(shù)進(jìn)行快速的初始化
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
在一個(gè)水果集合當(dāng)中,找到單詞最長(zhǎng)那個(gè)水果
寫法一:
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表達(dá)式的寫法
- Lambda定義:就是一小段可以作為參數(shù)傳遞的代碼
- Lambda表達(dá)式的語(yǔ)法結(jié)構(gòu)體
{參數(shù)名1: 參數(shù)類型, 參數(shù)名2: 參數(shù)類型 -> 函數(shù)體}
- 回到剛才找出最長(zhǎng)單詞的水果的需求,其中maxBy就是一個(gè)普通的函數(shù)而已,只不過就是接收了一個(gè)Lambda類型的參數(shù),并且在遍歷的時(shí)候?qū)⒚看伪闅v的值傳遞給Lambda表達(dá)式,maxBy函數(shù)就是根據(jù)我們傳入的條件來遍歷集合,從而找到該條件下的最大值
- 理解原理之后這個(gè)代碼就可以這樣寫了
val list = listOf<String>("Apple", "Banana", "Orange", "Pear")
//定義一個(gè)lambda表達(dá)式
val lambda = {fruit: String -> fruit.length}
//然后將這個(gè)lambda表達(dá)式作為參數(shù)傳遞給maxBy函數(shù),maxBy函數(shù)的作用就是遍歷集合,根據(jù)參數(shù)條件來找到最大值
val maxLengthFruit = list.maxBy(lambda)
- 但是上述寫法比較啰嗦麻煩,可以在此基礎(chǔ)上進(jìn)行簡(jiǎn)化操作
- 首先不需要專門定義一個(gè)Lambda變量,而是可以直接將Lambda表達(dá)式傳入maxBy函數(shù)中
val maxLengthFruit = list.maxBy({<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->fruit: String -> fruit.length})- 然后在Kotlin當(dāng)中規(guī)定當(dāng)Lambda表達(dá)式是函數(shù)最后一個(gè)參數(shù)的時(shí)候,可以將Lambda表達(dá)式一道函數(shù)括號(hào)外面
val maxLengthFruit = list.maxBy(){<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->fruit: String -> fruit.length}- 如果當(dāng)lambda參數(shù)是函數(shù)唯一一個(gè)參數(shù)的時(shí)候,函數(shù)的括號(hào)可以省略
val maxLengthFruit = list.maxBy{<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->fruit: String -> fruit.length}- 然后在Kotlin當(dāng)中擁有優(yōu)秀的推到機(jī)制,Lambda表達(dá)式中的參數(shù)列表在大多數(shù)的情況下沒必要聲明參數(shù)的類型,因此可以進(jìn)一步簡(jiǎn)化成為
val maxLengthFruit = list.maxBy{<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->fruit -> fruit.length}- 最后在Lambda中當(dāng)參數(shù)列表只有一個(gè)參數(shù)的時(shí)候,也不必要聲明參數(shù)名,而是直接使用it關(guān)鍵字代替即可,那么代碼就變成了
val maxLenght = list.maxBy{<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->it.length}- 集合當(dāng)中的map函數(shù)是比較常用的一種函數(shù)式API,它將用于集合中每個(gè)元素都映射成為一個(gè)另外的值,映射的規(guī)則在Lambda表達(dá)式中進(jìn)行指定
- 將單詞都轉(zhuǎn)換成為大寫字母
val list = listOf<String>("Apple", "Banana")
val newList = list.map { it.toUpperCase() }
for (fruit in newList) {
println(fruit)
}
- map函數(shù)的功能十分的強(qiáng)大,可以按照我們的需求對(duì)集合中的元素進(jìn)行任意的映射轉(zhuǎn)換
- filter函數(shù):是用來過濾集合當(dāng)中數(shù)據(jù)的,可以單獨(dú)使用,也可以和map函數(shù)配合在一起進(jìn)行使用
- 比如我們想保留5個(gè)字母以內(nèi)的水果,并且將字母全部轉(zhuǎn)換成為大寫字母
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ù)用于判斷集合中是否至少存在一個(gè)元素滿足指定條件,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)
到此這篇關(guān)于Kotlin Lambda表達(dá)式實(shí)踐使用介紹的文章就介紹到這了,更多相關(guān)Kotlin Lambda內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Flutter如何使用Completer實(shí)現(xiàn)防抖功能
防抖是用于確保時(shí)間內(nèi)的所有觸發(fā)被合并成單一請(qǐng)求,在Flutter中,我們可以使用Completer 來實(shí)現(xiàn)防抖功能,下面我們就來看看具體實(shí)現(xiàn)方法吧2024-03-03
android時(shí)間選擇控件之TimePickerView使用方法詳解
這篇文章主要為大家詳細(xì)介紹了android時(shí)間選擇控件之TimePickerView的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
在Android上實(shí)現(xiàn)HttpServer的示例代碼
本篇文章主要介紹了在Android上實(shí)現(xiàn)HttpServer的示例代碼,實(shí)現(xiàn)Android本地的微型服務(wù)器,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
Android編程實(shí)現(xiàn)手機(jī)拍照的方法詳解
這篇文章主要介紹了Android編程實(shí)現(xiàn)手機(jī)拍照的方法,結(jié)合實(shí)例形式分析了Android實(shí)現(xiàn)手機(jī)拍照的操作步驟與具體細(xì)節(jié),需要的朋友可以參考下2016-11-11
Android簡(jiǎn)單判斷某個(gè)APK是否已經(jīng)安裝的方法
這篇文章主要介紹了Android簡(jiǎn)單判斷某個(gè)APK是否已經(jīng)安裝的方法,通過針對(duì)應(yīng)用程序包名的讀取及判斷獲取安裝信息,需要的朋友可以參考下2016-08-08
Android編程將Activity背景設(shè)置為墻紙的簡(jiǎn)單實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程將Activity背景設(shè)置為墻紙的簡(jiǎn)單實(shí)現(xiàn)方法,涉及Android簡(jiǎn)單的屬性設(shè)置及XML配置修改等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android開發(fā)之關(guān)閉和打開Speaker(揚(yáng)聲器)的方法
這篇文章主要介紹了Android開發(fā)之關(guān)閉和打開Speaker(揚(yáng)聲器)的方法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Android揚(yáng)聲器的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-03-03
Android中日期與時(shí)間設(shè)置控件用法實(shí)例
這篇文章主要介紹了Android中日期與時(shí)間設(shè)置控件用法,實(shí)例分析了Android日期與時(shí)間相關(guān)控件的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
Android ViewPager實(shí)現(xiàn)無限循環(huán)效果
這篇文章主要為大家詳細(xì)介紹了Android ViewPager實(shí)現(xiàn)無限循環(huán)效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03

