Создать неизменяемый список из java.lang.Iterator

В.NET StringBuilder еще быстрее, чем добавление строк. Я вполне уверен, что в Java, они просто создают StringBuffer под капотом, когда Вы добавляете строки, таким образом, существует, не действительно различие. Я не уверен, почему они еще не сделали этого в.NET.

22
задан Jean-Philippe Pellet 16 May 2011 в 08:50
поделиться

1 ответ

Возможно, вы захотите переосмыслить потребность в List, хотя он кажется очень знакомым при переходе с Java, и List является реализацией неизменяемого по умолчанию Seq, часто это не лучший выбор для коллекции.

Операции, для которых этот список является оптимальным, - это те, которые уже доступны через итератор (в основном, с использованием последовательных элементов заголовка и предшествующих элементов). Если итератор уже не дает вам то, что вам нужно, тогда я могу в значительной степени гарантировать, что List не будет вашим лучшим выбором - вектор будет более подходящим.


Разобравшись с этим ... Рекомендованный метод для преобразования между коллекциями Java и Scala (начиная с Scala 2.8.1) - через scala.collection.JavaConverters . Это дает вам больше контроля, чем JavaConversions, и позволяет избежать некоторых возможных неявных конфликтов.

Таким образом, у вас не будет прямого неявного преобразования. Вместо этого вы получаете методы asScala и asJava, наложенные на коллекции, что позволяет вам выполнять преобразования явно.

Чтобы преобразовать итератор Java в итератор Scala:

javaIterator.asScala

Чтобы преобразовать итератор Java в список Scala (через итератор scala):

javaIterator.asScala.toList

Вы также можете рассмотреть возможность преобразования toSeq вместо toList. В случае итераторов это вернет Stream - что позволит вам сохранить ленивое поведение итераторов в более богатом интерфейсе Seq.

РЕДАКТИРОВАТЬ: Нет метода toVector, но (как указал Даниэль) есть метод toIndexedSeq, который будет возвращать Vector в качестве подкласса по умолчанию IndexedSeq (так же, как List ] по умолчанию Seq).

javaIterator.asScala.toIndexedSeq
34
ответ дан 29 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: