集合的创建和遍历
list:
package com.example.helloworld.learnKotlin_lambda.collection_create_for
fun main()
{
// 1
// val list = ArrayList<String>()
// list.add("Apple")
// list.add("Banana")
// list.add("Orange")
// list.add("Pear")
// list.add("Grape")
// 2
// 不可变集合
val list1 = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
for (fruit in list1) {
println(fruit)
}
// 3
// 可变集合
val list2 = mutableListOf("Apple", "Banana", "Orange", "Pear", "Grape")
list2.add("Watermelon")
for (fruit in list2) {
println(fruit)
}
}
map:
package com.example.helloworld.learnKotlin_lambda.collection_create_for
fun main()
{
// 1
// val map = HashMap<String, Int>()
// map.put("Apple", 1)
// map.put("Banana", 2)
// map.put("Orange", 3)
// map.put("Pear", 4)
// map.put("Grape", 5)
// 2
val map1 = HashMap<String, Int>()
map1["Apple"] = 1
map1["Banana"] = 2
map1["Orange"] = 3
map1["Pear"] = 4
map1["Grape"] = 5
// 3
// to不是关键字, 是infix函数
val map2 = mapOf("Apple" to 1, "Banana" to 2, "Orange" to 3, "Pear" to 4, "Grape" to 5)
for ((fruit, number) in map2) {
println("fruit is " + fruit + ", number is " + number)
}
}
set:
package com.example.helloworld.learnKotlin_lambda.collection_create_for
fun main()
{
// 不可变集合
val set1 = setOf("Apple", "Banana", "Orange", "Pear", "Grape")
for (fruit in set1) {
println(fruit)
}
// 可变集合
val set2 = mutableSetOf("Apple", "Banana", "Orange", "Pear", "Grape")
set2.add("Watermelon")
for (fruit in set2) {
println(fruit)
}
}
集合的函数式API
maxBy:
package com.example.helloworld.learnKotlin_lambda.collection_API
// 找到单词最长的那个水果
fun main()
{
val list1 = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
var maxLengthFruit1 = ""
for (fruit in list1) {
if (fruit.length > maxLengthFruit1.length) {
maxLengthFruit1 = fruit
}
}
println("max length fruit is " + maxLengthFruit1)
val list2 = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val maxLengthFruit2 = list2.maxBy { it.length }
println("max length fruit is " + maxLengthFruit2)
val list3 = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
// val lambda = { fruit: String -> fruit.length }
// val maxLengthFruit3 = list3.maxBy(lambda)
// val maxLengthFruit3 = list3.maxBy({ fruit : String -> fruit.length })
// Lambda参数使函数的最后一个参数时, 可以将lambda表达式移到函数括号外面
// val maxLengthFruit3 = list3.maxBy() { fruit : String -> fruit.length }
// Lambda参数是函数的唯一一个参数的话, 还可以将函数的括号省略
// val maxLengthFruit = list3.maxBy { fruit : String -> fruit.length }
// Kotlin类型推导, 省去类型声明
// val maxLengthFruit = list3.maxBy { fruit -> fruit.length }
// Lambda参数列表只有一个参数时, 不必声明参数名, 可以使用it关键字
val maxLengthFruit = list3.maxBy { it.length }
}
map:
package com.example.helloworld.learnKotlin_lambda.collection_API
fun main()
{
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
val newList = list.map { it.toUpperCase() }
for (fruit in newList) {
println(fruit)
}
}
filter:
package com.example.helloworld.learnKotlin_lambda.collection_API
fun main()
{
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:
package com.example.helloworld.learnKotlin_lambda.collection_API
fun main() {
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape", "Watermelon")
// any函数判断集合中是否至少有一个元素满足条件
val anyResult = list.any { it.length <= 5 }
// all函数判断集合是否所有元素都满足条件
val allResult = list.all { it.length <= 5 }
println("anyResult is " + anyResult + ", allResult is " + allResult)
}