14. 集合类

1. Kotlin的集合类

Kotlin的集合类分为可变集合类和不可变集合类

2. 常用的三种集合类

主要有三种: List(列表),Set(集合),Map(映射)

  • List容器中的元素以线性方式存储,元素是有序的排列,可以存放重复对象。
  • Set集合中的元素无序且不能重复
  • Map持有的是一个键值对(K - V)对象
3. 创建集合类

List列表分为只读不可变的List和可变的MutableList

val list = listOf<Int>(1,2,3,4,5,6);
var mutableList = mutableListOf<Int>();

Set集也分为不可变set和可变MutableSet

val set = setOf<Int>(1,2,3,4,5,6);
var mutableSet = mutableSetOf<Int>();

Map也分为只读Map和可变MutableMap

val map = mapOf<Int,String>(1 to "a",2 to "b",3 to "c");
val mutableMap = mutableMapOf<Int,String>();
4. 遍历集合中的元素
4.1 遍历元素

使用forEach()函数遍历

// List中的forEach
list.forEach {
    println(it); // 1 2 3 4 5 6
}

// Set中的forEach
set.forEach {
    println(it); // 1 2 3 4 5 6
}

// map中的forEach
map.forEach {
    println("${it.key} - ${it.value}"); // 1 - a 2 - b 3 - c
}

当我们在遍历元素的同时,想获取元素的下标,可以使用forEachIndexed()函数

list.forEachIndexed { index, value ->
    println("index = $index, value = $value"); // index = 0, value = 1 ...
}

set.forEachIndexed { index, value ->
    println("index = $index,value = $value"); // index = 0, value = 1 ...
}
5. 映射函数

使用map函数,可以把集合中的元素,依次使用给定的转换函数,进行映射操作,元素映射之后的新值,会存入一个新的集合中,并返回这个新的集合

private fun listMap(): Unit {
    val numberList = listOf(1,2,3,4,5,6);
    val newNumberList = numberList.map { it -> it + 1 }
    println(newNumberList); // [2, 3, 4, 5, 6, 7]
}

flatten()函数,可以把内层的嵌套List,平铺称为1层

// 传入List
val doubleList = numberList.map { it -> listOf(it + 2,it + 3,it + 4) }
println(doubleList); // [[3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [7, 8, 9], [8, 9, 10]]
println(doubleList.flatten()); // [3, 4, 5, 4, 5, 6, 5, 6, 7, 6, 7, 8, 7, 8, 9, 8, 9, 10]

flatMap()函数是map函数和flatten的集合

// flatMap
val flatMapList = numberList.flatMap { it -> listOf(it * 2, it * 3, it * 4) }
println(flatMapList); //[2, 3, 4, 4, 6, 8, 6, 9, 12, 8, 12, 16, 10, 15, 20, 12, 18, 24]
6. 过滤函数

filter()函数

val studentList = listOf(
    Student(1, "Jack", 18, 86),
    Student(2, "Rose", 23, 75),
    Student(3, "Alice", 25, 89)
);

val studentList1 = studentList.filter { it.age < 22 };
println(studentList1); // [Student(id = 1, name = Jack, age = 18, score = 86)]

filterIndexed()函数

val list = listOf<Int>(0,1,2,3,4,5,6);
val list1 = list.filterIndexed { index, it -> index % 2 == 0 && it > 3 }
println(list1); // [4, 6]
7. 排序函数

今天来聊下,List和Set中常用的两个排序函数。

reversed()

reversed()函数,是一个倒序函数,注意不是降序

val list = listOf(7, 5, 9, 8, 3, 1);

var revertList = list.reversed();
println(revertList); // [1, 3, 8, 9, 5, 7]
sorted()

sorted()函数,是一个升序函数,是从小往大排列的~

val list = listOf(7, 5, 9, 8, 3, 1);

val sortList = list.sorted();
println(sortList); // [1, 3, 5, 7, 8, 9]
8. 去重函数

如果想对一个一个列表进行去重,可以使用distinct()函数

val list = listOf(1, 2, 2, 3, 3, 3, 4, 4, 4, 4);
val distinctList = list.distinct();
println(distinctList); // [1, 2, 3, 4]

推荐阅读更多精彩内容