Конвертировать из 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