Котлин Мгновует неизменяемый список

Я начал использовать Kotlin в качестве замены java и совсем ему нравится. Однако я не смог найти решение для этого, не перепрыгивая обратно в java-land:

У меня есть Iterable<SomeObject> и 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 , они заканчиваются MutableLists , который работает, но чувствует себя обходным MutableLists . Есть ли аналогичный immutableListOf(Iterable<SomeObject>) который будет создавать экземпляр объекта неизменяемого списка?

    В Kotlin List<T> – это интерфейс списка только для чтения , он не имеет функций для изменения содержимого, в отличие от MutableList<T> .

    В общем случае реализация List<T> может быть измененным списком (например, ArrayList<T> ), но если вы передадите его как List<T> , никакие мутирующие функции не будут показаны без кастинга. Такая ссылка на список называется только для чтения , заявив, что список не предназначен для изменения. Это неизменность через интерфейсы, которые были выбраны в качестве подхода к неизменности для Kotlin stdlib.

    Ближе к вопросу, toList() расширения toList() для Iterable<T> в stdlib будет соответствовать: он возвращает List<T> только для чтения List<T> .

    Пример:

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