在Java代码中从scala.collection.Seq <String>转换为java.util.List <String>

Cac*_*nta 29 java scala type-conversion scala-java-interop

我从Java调用Scala方法.我需要进行从Seq到List的转换.

我无法修改Scala方法的签名,所以我无法使用该asJavaCollection方法scala.collection.JavaConversions._

有关如何实现这一目标的任何想法?

使用Scala 2.9.3

Chr*_*tin 43

您正在使用正确的轨道JavaConversions,但此特定转换所需的方法是seqAsJavaList:

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


4le*_*x1v 8

从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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • scala为这些类型的转换提供更友好的前端方法可能是一个好主意. (4认同)

ber*_*kyi 7

从2.12开始,这是推荐的方式:

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

所有其他方法a @deprecated("use JavaConverters or consider ToJavaImplicits", since="2.12.0")