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()