Подтвердить что ты не робот

Преобразовать из scala.collection.Seq <String> в java.util.List <String> в код Java

Я вызываю метод Scala с Java. И мне нужно сделать преобразование из Seq в List.

Я не могу изменить подпись метода Scala, поэтому я не могу использовать метод asJavaCollection из scala.collection.JavaConversions._

Любые идеи о том, как я могу достичь этого?

Использование Scala 2.9.3

4b9b3361

Ответ 1

Используя JavaConversions, вы на правильном пути, но для этого конкретного преобразования вам нужен метод seqAsJavaList:

java.util.List<String> convert(scala.collection.Seq<String> seq) {
    return scala.collection.JavaConversions.seqAsJavaList(seq);
}

Обновление: JavaConversions устарела, но та же функция может быть найдена в JavaConverters.

java.util.List<String> convert(scala.collection.Seq<String> seq) {
    return scala.collection.JavaConverters.seqAsJavaList(seq);
}

Ответ 2

Так как Scala 2.9, вы не должны использовать implicits от JavaConversions, поскольку они устарели и скоро будут удалены. Вместо этого, чтобы преобразовать Seq в java List, используйте пакет convert как это (хотя это выглядит не очень хорошо):

import scala.collection.convert.WrapAsJava$;

public class Test {
    java.util.List<String> convert(scala.collection.Seq<String> seq) {
        return WrapAsJava$.MODULE$.seqAsJavaList(seq);
    }
}

Ответ 3

Начиная с версии 2.12 это рекомендуется:

public static <T> java.util.List<T> convert(scala.collection.Seq<T> seq) {
    return scala.collection.JavaConverters.seqAsJavaList(seq);
}

Все остальные методы a @deprecated("use JavaConverters or consider ToJavaImplicits", since="2.12.0")

Ответ 4

(Если вы хотите сделать это преобразование в коде Scala)

Вы можете использовать JavaConverters, чтобы сделать это очень просто.

import collection.JavaConverters._
val s: Seq[String] = ...
val list: java.util.List<String> = s.asJava