我从Java调用Scala方法。我需要进行从Seq到List的转换。
我无法修改Scala方法的签名,因此我无法使用asJavaCollection
scala.collection.JavaConversions._
方法
有关如何实现这一目标的任何想法?
使用Scala 2.9.3
答案 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