天天看點

【kotlin】List、Map、集合的函數式API

List

聲明一個list并列印

var lists = listOf("化學","實體","數學")
    for(list in lists){
        println(list)
    }      
【kotlin】List、Map、集合的函數式API

列印list下标和值

var lists = listOf("化學","實體","數學")
    for((i,e) in lists.withIndex()){
        println("$i $e")
    }      
【kotlin】List、Map、集合的函數式API

用 ​​

​listOf​

​​函數建立的是一個不可變的集合,建立可變集合使用 ​

​mutableListOf​

val list = mutableListOf("Apple","Banana","Orange")
list.add("Pear")      

前邊介紹的是 List 集合的用法,實際上 Set 集合與此一模一樣隻是換成了 ​

​setOf()​

​​ 和 ​

​mutableSetOf()​

Map

Kotlin的Map集合用于儲存key-value對

var map = TreeMap<String,String>()
map["好"] = "good"
map["學習"] = "study"
map["天"] = "day"
map["向上"] = "up"
for ((key, value) in map) {
    println("${key}->${value}")
}      
【kotlin】List、Map、集合的函數式API

從 Map 中讀取一條資料可以這樣寫

println(map["好"])      

像 List 和 Set 一樣,Kotlin也提供了一對 ​

​mapOf()​

​​ 和 ​

​mutableMapOf()​

​ 來簡化 Map 用法

val map = mapOf("好" to "good","學習" to "study","天" to "day","向上" to "up")
for((key,value) in map){
  println("${key}->${value}")
}      

集合的函數式API

【kotlin】List、Map、集合的函數式API
【kotlin】List、Map、集合的函數式API

找出長度最長的單詞

如果我們有一個水果集合,要找出單詞最長的那個你可以這樣寫

val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    var maxLengthFruit = ""
    for(fruit in list){
        if(fruit.length > maxLengthFruit.length){
            maxLengthFruit = fruit
        }
    }
    println("max lenth fruit is "+maxLengthFruit)      

運作結果

【kotlin】List、Map、集合的函數式API

如果我們使用集合的函數式API,可以讓這個功能更簡單

val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    var maxLengthFruit = list.maxBy { it.length }
    println("max lenth fruit is "+maxLengthFruit)      

現在看這段代碼你可能比較吃力,因為還沒有學 Lambda 表達式的文法結構。Lambda 就是一小段可以作為參數傳遞的代碼,通常不建議在 Lambda 表達式中編寫太長代碼,否則可能影響代碼可讀性。Lambda 表達式文法結構如下:

{參數名1:參數類型,參數名2:參數類型 -> 函數體}      

首先最外層是一對大括号,如果有參數傳入到 Lambda 表達式中的話,我們還需要聲明參數清單,參數清單結尾用一個 -> 符号表示參數清單結束以及函數體開始。函數體中可以編寫任意行代碼(不建議編寫太長代碼),并且最後一行代碼會自動作為 Lambda 表達式的傳回值

map函數:單詞變成大寫

集合中的 map 函數是最常用的一種函數式 API,它用于将集合中的每個元素都映射成另外的

值,映射規則在 Lambda 表達式中指定,最終形成新的集合。例如,我們希望讓所有水果都變成大寫模式

val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    val newlist = list.map { it.toUpperCase() }
    for(fruit in newlist){
        println(fruit)
    }      
【kotlin】List、Map、集合的函數式API

filter 函數:保留5字以内的水果

filter 函數就是過濾集合中資料的,可以單獨使用,也可以配合 map 函數使用

val list = listOf("Apple","Banana","Orange","Pear","Grape","Watermelon")
    val newlist = list.filter { it.length <=5 }
        .map { it.toUpperCase() }
    for(fruit in newlist){
        println(fruit)
    }      

any 和 all

any 函數用于判斷集合中是否至少存在一個元素滿足指定條件

all 函數用于判斷集合中是否所有元素滿足指定條件

val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
    val anyResult = list.any { it.length <= 5 }
    val allResult = list.all { it.length <= 5 }
    println("anyResult is " + anyResult + ",allResult is " + allResult)      

Java函數式API使用