Конвертировать из scala.коллекция.Seq на java.утиль.Список в коде Java
Я вызываю метод Scala из Java. И мне нужно сделать преобразование из Seq в List.
Я не могу изменить подпись метода Scala, поэтому я не могу использовать asJavaCollection
метод scala.collection.JavaConversions._
любые идеи о том, как я могу этого достичь?
Использование Scala 2.9.3
4 ответов
ты на правильном пути, используя JavaConversions
, но метод для этого конкретное преобразование seqAsJavaList
:
java.util.List<String> convert(scala.collection.Seq<String> seq) {
return scala.collection.JavaConversions.seqAsJavaList(seq);
}
поскольку Scala 2.9, вы не должны использовать неявные преобразования от 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);
}
}
С 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")
(Если вы хотите сделать это преобразование в коде Scala)
вы можете использовать JavaConverters, чтобы сделать это очень легко.
import collection.JavaConverters._
val s: Seq[String] = ...
val list: java.util.List<String> = s.asJava