Преобразовать из scala.collection.Seq <String> в java.util.List <String> в код Java
Я вызываю метод Scala с Java. И мне нужно сделать преобразование из Seq в List.
Я не могу изменить подпись метода Scala, поэтому я не могу использовать метод asJavaCollection
из scala.collection.JavaConversions._
Любые идеи о том, как я могу достичь этого?
Использование Scala 2.9.3
Ответы
Ответ 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