30

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

我不能修改 Scala 方法的签名,所以我不能使用asJavaCollection来自的方法scala.collection.JavaConversions._

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

使用 Scala 2.9.3

4

4 回答 4

47

您正在使用正确的轨道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);
}
于 2013-07-19T04:25:21.623 回答
8

从 Scala 2.9 开始,您不应该使用隐含,JavaConversions因为它们已被弃用并且很快将被删除。相反,要转换Seq成 javaList使用convert这样的包(虽然它看起来不太好):

import scala.collection.convert.WrapAsJava$;

public class Test {
    java.util.List<String> convert(scala.collection.Seq<String> seq) {
        return WrapAsJava$.MODULE$.seqAsJavaList(seq);
    }
}
于 2013-07-19T07:06:33.770 回答
8

从 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")

于 2017-07-18T20:36:43.373 回答
0

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

您可以使用 JavaConverters 使这变得非常容易。

import collection.JavaConverters._
val s: Seq[String] = ...
val list: java.util.List<String> = s.asJava
于 2017-08-01T02:07:26.920 回答