我已经开始使用Kotlin作为java的替代品并且非常喜欢它 . 但是,如果没有跳回到java-land,我一直无法找到解决方案:
我有 Iterable<SomeObject>
并需要将其转换为列表,因此我可以多次迭代它 . 这是一个不可变列表的明显应用,因为我需要做的就是多次读取它 . 我如何在开始时将这些数据实际放入列表中? (我知道's an interface, but I'已经无法在文档中找到它的实现)
可能的(如果不满意)解决方案:
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>)
方法将实例化一个不可变的列表对象?
1 回答
在Kotlin中,List<T>是一个只读列表接口,它没有用于更改内容的功能,这与MutableList<T>不同 .
通常,
List<T>
实现可能是一个可变列表(例如ArrayList<T>
),但如果将其作为List<T>
传递,则不会在不进行强制转换的情况下公开变异函数 . 这样的列表引用称为只读,表明列表不打算更改 . 这是immutability through interfaces被选为Kotlin stdlib的不变性方法 .更接近问题,stdlib中的
Iterable<T>
的toList()扩展函数将适合:它返回只读List<T>
.例: