# 集合类

## 集合类概述

• Iterable 可遍历
• MutableIterable 支持删除元素的迭代
• List/Set/Map，只读不可变
• MutableList/MutableSet/MutableMap，可读写

## 创建集合类

• listOf/setOf/mapOf 创建不可变集合
• mutableListOf()、mutableSetOf()、mutableMapOf() 创建可变集合

## 遍历集合中的元素

List、Set类继承了Iterable接口，里面扩展了forEach函数来迭代遍历元素；同样，Map接口中也扩展了forEach函数来迭代遍历元素。

``````fun main() {
val list = listOf<Int>(1, 2, 3, 4)
list.forEach { println(it) }
list.forEachIndexed { index, i -> println(list[index]) }

val set = setOf<Int>(1, 2, 3, 4)
set.forEach { println(it) }
set.forEachIndexed { index, i -> println("index:\$index, i:\$i") }

val map = mapOf(1 to 'A', 2 to 'B', 3 to 'C')
map.forEach { t, u -> println("Key:\$t, value:\$u") }
map.entries.forEach { println(it) }
}
``````
``````1
2
3
4
1
2
3
4

1
2
3
4
index:0, i:1
index:1, i:2
index:2, i:3
index:3, i:4

Key:1, value:A
Key:2, value:B
Key:3, value:C
1=A
2=B
3=C
``````

## 映射函数

``````fun main() {
val list = listOf(1, 2, 3, 4)
val list2 = list.map { it * it }
val list3 = list.map { it -> listOf(it + 1, it + 2, it + 3, it + 4) }

println(list2)
println(list3)
println(list3.flatten()) // Iterator<Iterator> 类型才能flatten
list.flatMap { it -> listOf(it + 1, it + 2, it + 3, it + 4) } // 相当于map + flatten

}

[1, 4, 9, 16]
[[2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7], [5, 6, 7, 8]]
[2, 3, 4, 5, 3, 4, 5, 6, 4, 5, 6, 7, 5, 6, 7, 8]
[2, 3, 4, 5, 3, 4, 5, 6, 4, 5, 6, 7, 5, 6, 7, 8]
``````

## 过滤函数

``````val list = listOf(1,2,3,4)
list.filter{ it >= 2 }
``````

## 排序函数

``````    list.reversed()
list.sorted()
``````

## 去重函数

``````val dupList = listOf(1, 1, 2, 2, 3, 3, 3)
dupList.distinct() //去重函数，返回 [1, 2, 3]
``````

http://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/index.html