В.NET StringBuilder еще быстрее, чем добавление строк. Я вполне уверен, что в Java, они просто создают StringBuffer под капотом, когда Вы добавляете строки, таким образом, существует, не действительно различие. Я не уверен, почему они еще не сделали этого в.NET.
Возможно, вы захотите переосмыслить потребность в 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