相关疑难解决方法(0)

Kotlin中List和Array类型之间的区别

ListArray类型有什么区别?
它似乎可以与它们进行相同的操作(循环,过滤器表达式等),行为或用法有什么不同吗?

val names1 = listOf("Joe","Ben","Thomas")
val names2 = arrayOf("Joe","Ben","Thomas")

for (name in names1)
    println(name)
for (name in names2)
    println(name)
Run Code Online (Sandbox Code Playgroud)

kotlin

139
推荐指数
3
解决办法
4万
查看次数

Kotlin和Immutable Collections?

我正在学习Kotlin,看起来我可能希望在明年使用它作为我的主要语言.然而,我不断得到相互矛盾的研究,Kotlin有或没有不可变的集合,我想弄清楚我是否需​​要使用Google Guava.

有人可以给我一些指导吗?它默认使用不可变集合吗?什么操作符返回可变或不可变的集合?如果没有,是否有计划实施它们?

kotlin

37
推荐指数
4
解决办法
1万
查看次数

如何将Mutable Collection变成一个不可变的集合

我正在编写一小段代码,我在内部处理可变映射中的数据,而后者又有可变列表.

我想将我的数据暴露给API用户,但为了避免任何不安全的数据发布,我想在不可变集合中公开它,即使内部由可变集合处理也是如此.

class School {

    val roster: MutableMap<Int, MutableList<String>> = mutableMapOf<Int, MutableList<String>>()

    fun add(name: String, grade: Int): Unit {
        val students = roster.getOrPut(grade) { mutableListOf() }
        if (!students.contains(name)) {
            students.add(name)
        }
    }

    fun sort(): Map<Int, List<String>> {
        return db().mapValues { entry -> entry.value.sorted() }
                .toSortedMap()
    }

    fun grade(grade: Int) = db().getOrElse(grade, { listOf() })
    fun db(): Map<Int, List<String>> = roster //Uh oh!
}
Run Code Online (Sandbox Code Playgroud)

我设法只在我的类的公共API中公开MapList(它是不可变的),但我实际暴露的实例仍然具有固有的可变性.

这意味着API用户可以简单地将我返回的地图强制转换为ImmutableMap,并获得对我的类内部的宝贵私有数据的访问权限,这些私有数据旨在受到这种访问的保护.

我找不到在收集工厂方法一个拷贝构造函数mutableMapOf()mutableListOf(),所以我想知道什么是将可变集合到一个不变的一个最好的和最有效的方式.

有什么建议或建议吗?

kotlin

34
推荐指数
4
解决办法
2万
查看次数

在Kotlin中将不可变映射复制到可变映射

如果我有immutableMap: Map<String, Int>并希望将其转换为a mutableMap: MutableMap<String, Int>,那么最好的方法是什么?似乎没有任何方便的方式.

kotlin

14
推荐指数
2
解决办法
7138
查看次数

标签 统计

kotlin ×4