Kotlin实例化不可变列表
我已经开始使用Kotlin作为java的替代品,并且非常喜欢它。 但是,我一直无法找到一个解决方案,而不跳回到java土地:
我有一个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>
是一个只读列表接口,与MutableList<T>
不同,它没有改变内容的功能。
一般来说, List<T>
实现可能是一个可变列表(例如ArrayList<T>
),但是如果将它作为List<T>
传递,则不会暴露变异函数而不投射。 这样的列表引用被称为只读 ,表明列表不会被改变。 这是通过接口的不变性 ,被选为Kotlin stdlib的不变性方法。
接近这个问题,stdlib中的Iterable<T>
toList()
扩展函数将适合:它返回只读的List<T>
。
例:
val iterable: Iterable<Int> = listOf(1, 2, 3) val list: List<Int> = iterable.toList()