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()
我已经开始使用 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()