从scala.collection.Seq <string>转换为Java代码中的java.util.List <string> </string> </string>

时间:2013-07-19 03:27:09

标签: java scala type-conversion scala-java-interop

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

我无法修改Scala方法的签名,因此我无法使用asJavaCollection

中的scala.collection.JavaConversions._方法

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

使用Scala 2.9.3

4 个答案:

答案 0 :(得分:39)

您使用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);
}

答案 1 :(得分:8)

自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 :(得分:7)

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

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

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

答案 3 :(得分:1)

(如果您想在Scala代码中执行此转换)

您可以使用JavaConverters使其变得非常简单。

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