在 Java 代码中从 scala.collection.Seq<String> 转换为 java.util.List<String>
Posted
技术标签:
【中文标题】在 Java 代码中从 scala.collection.Seq<String> 转换为 java.util.List<String>【英文标题】:Convert from scala.collection.Seq<String> to java.util.List<String> in Java code 【发布时间】:2013-07-18 05:45:26 【问题描述】:我正在从 Java 调用 Scala 方法。我需要进行从 Seq 到 List 的转换。
我不能修改Scala方法的签名,所以我不能使用scala.collection.JavaConversions._
中的asJavaCollection
方法
关于如何实现这一点的任何想法?
使用 Scala 2.9.3
【问题讨论】:
【参考方案1】:使用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);
【讨论】:
我无法在 Eclipse 中 import scala.collection.JavaConversions;。它在这里显示错误 不确定这是否是新的,但我必须通过seqAsJavaList(seq).asJava
获得实际的List<E>
刚刚添加了一个匿名编辑,以使用新的 JavaConverters 类(自 2.8.1 起)。希望会被批准。
@Decoded:感谢您的改进 :) 我没有按原样接受编辑,因为我希望答案在问题的上下文中仍然有意义,但我添加了一个使用JavaConverters
.
谢谢!喜欢走在最前沿:D【参考方案2】:
从 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);
【讨论】:
scala 为这些类型的转换提供一组对 java 更友好的前端方法可能是个好主意。【参考方案3】:从 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")
【讨论】:
【参考方案4】:(如果你想在 Scala 代码中进行这种转换)
您可以使用 JavaConverters 让这变得非常简单。
import collection.JavaConverters._
val s: Seq[String] = ...
val list: java.util.List<String> = s.asJava
【讨论】:
问题要求转换为 Java 代码,而不是 Scala 代码。 啊,我的错,我知道我觉得奇怪的是,还没有人提出这个解决方案——现在说得通了。以上是关于在 Java 代码中从 scala.collection.Seq<String> 转换为 java.util.List<String>的主要内容,如果未能解决你的问题,请参考以下文章
使用 Gradle 在 Spring Boot 项目中从 Kotlin 测试中引用 Java 代码时未解决的引用
Android在C ++ JNI代码中从另一个活动类调用Java函数
在 java spark 中从 REST API 读取 csv
在 Java 代码中从 scala.collection.Seq<String> 转换为 java.util.List<String>