Kotlin 实例化不可变列表

Kotlin Instantiate Immutable List

我已经开始使用 Kotlin 作为 java 的替代品并且非常喜欢它。但是,如果不跳回 java-land:

,我一直无法找到解决方案

我有一个 Iterable<SomeObject> 并且需要将其转换为列表以便我可以多次迭代它。这是一个不可变列表的明显应用,因为我需要做的就是多读几遍。但是,我实际上如何在开始时将该数据放入列表中? (我知道它是一个接口,但我一直无法在文档中找到它的实现)

可能的(如果不满意)解决方案:

val valueList = arrayListOf(values)
// iterate through valuelist

fun copyIterableToList(values: Iterable<SomeObject>) : List<SomeObject> {
    var outList = ArrayList<SomeObject>()
    for (value in values) {
        outList.add(value)
    }
    return outList
}

除非我误会了,否则这些以 MutableLists 结尾,它有效但感觉像是一种解决方法。是否有类似的 immutableListOf(Iterable<SomeObject>) 方法来实例化不可变列表对象?

在 Kotlin 中,List<T> is a read-only list interface, it has no functions for changing the content, unlike MutableList<T>

一般来说,List<T> 实现 可能是 可变列表(例如 ArrayList<T>),但如果将其作为 List<T> 传递, 没有转换就不会暴露任何变异函数。这样的列表引用称为 read-only,说明该列表不打算更改。这是 immutability through interfaces,它被选为 Kotlin stdlib 的不变性方法。

接近问题,toList() stdlib 中 Iterable<T> 的扩展函数将适合:它 returns read-only List<T>.

示例:

val iterable: Iterable<Int> = listOf(1, 2, 3)
val list: List<Int> = iterable.toList()