美文网首页
Kotlin 集合

Kotlin 集合

作者: jinkui | 来源:发表于2017-06-01 15:40 被阅读1092次

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

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

    • Arrays

    数组通过 arrayOf()创建。

    • Lists
    • Maps

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

    Kotlin 有 HashMap, LinkedHashMap, TreeMap。

    • Sets

    LinkedHashSet, HashSet, TreeSet。

    • Sequences

    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

    相关文章

      网友评论

          本文标题:Kotlin 集合

          本文链接:https://www.haomeiwen.com/subject/ntdefxtx.html