Kotlin 集合

2017-06-01  本文已影响1092人  jinkui

与 Java 不同, Kotlin 明确地区分可变的和不可变的集合(list, set, map, 等等)。可变的集合可以增删改集合元素;而不可变集合也提供了相应的方法,但是指向会创建新的集合,而不是在原来的集合上修改。

Kotlin 的集合都在命名空间 kotlin.collections。

数组通过 arrayOf()创建。

和 Java 的一样, 存储键值对。Kotlin 通过 mapOf()创建 Map。

Kotlin 有 HashMap, LinkedHashMap, TreeMap。

LinkedHashSet, HashSet, TreeSet。

Sequences 用于为止大小的集合, 比如从数据库或者文件读取数据,不知道有多少行, 可以认为 Sequences 是一个无尽的 list。

固定大小的Sequences,可以通过 sequenceOf 表达式创建,比如 Array<T>.asSequence; 未知大小的,可以通过 generateSequence 创建。

val charSequence: Sequence<Char> = charArrayOf('a','b','c').asSequence()
val longsSequence: Sequence<Long> = listOf(12000L, 11L, -1999L).asSequence()
val mapSequence: Sequence<Map.Entry<Int, String>> = mapOf(1 to "A", 2 to "B", 3 to "C").asSequence()
val intSeq = sequenceOf(1, 2, 3, 4, 5)

var nextItem = 0
val sequence = generateSequence {
    nextItem += 1
    nextItem
}

val secondSequence = generateSequence(100) { if ((it + 1) % 2 == 0) it + 1 else it + 2 }

如下例子, 读取文件内容:

val stream = Thread.currentThread().javaClass.getResourceAsStream("/afile.txt")
val br = BufferedReader(InputStreamReader(stream))
val fileContent = generateSequence { br.readLine() }.takeWhile { it != null }
println("File content:${fileContent.joinToString(" ")}")

参考
《Programming Kotlin》Stephen Samuel ,Stefan Bocutiu
《Kotlin in Action》Dmitry Jemerov,Svetlana Isakova

上一篇下一篇

猜你喜欢

热点阅读