集合操作#

和 java 相比, kotlin 包含了丰富的集合操作。

再也不用 new 一个集合挨个塞元素了。kotlin 可以:

val texts = listOf("aa", "bb")
val texts = setOf("aa", "bb")
val texts = mapOf("aa" to 1, "bb" to 2)

再也不用费劲地取最后一个元素了: someList.length() > 0?someList[someList.length()-1]:null, kotlin 可以:

someList.lastOrNull()
someList.firstOrNull()

也终于不用什么 CollectionUtils, Arrays, StringUtils 了. 我们可以使用 真·面向对象 的方式写:

if (text.isEmpty())
if (text.isNullOrEmpty())
if (textA == textB)
if (listA == listB)
val setA = listA.toSet()

也不用担心自己创建的集合传入第三方函数后,数据被哪个老六改掉了,因为 kotlin 集合默认是不可变的:

val listA = listOf(1, 2, 3)
listA.add(33) // ERROR!!

val listB = mutableListOf(1, 2, 3)
listB.add(33) // OK

连 stream 的体验都上升了一个档次:

texts
    .filter {...}
    .map {...}
    .mapNotNull {...}
    .findLastNot {...}
val userMap: Map<Int, User> = users.associateBy { u -> u.getId() }

kotlin 的集合操作,远不止这些。 可以通过编辑器提示的方法,以及官方文档来探索这些方法:

  1. 从 java 到 kotlin 之 string

  2. 从 java 到 kotlin 之 collections

  3. 从 java 到 kotlin 之 nullability

  4. kotlin collections api 参考