在 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&lt;E&gt; 刚刚添加了一个匿名编辑,以使用新的 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>的主要内容,如果未能解决你的问题,请参考以下文章

java中从控制台输入代码问题

使用 Gradle 在 Spring Boot 项目中从 Kotlin 测试中引用 Java 代码时未解决的引用

Android在C ++ JNI代码中从另一个活动类调用Java函数

在 java spark 中从 REST API 读取 csv

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

在 Java 中从字节转换为 int