【问题标题】:Converting Scala seq<string> to Java List<string>将 Scala seq<string> 转换为 Java List<string>
【发布时间】:2016-08-22 01:05:24
【问题描述】:

我正在使用 Java。我需要将从 Apache Kafka 中的 Scala 方法返回的 Seq&lt;String&gt; 转换为 Java List&lt;String&gt; 进行处理。

我在 scala.collection.convert.WrapAsJava 类中找到了一种方法,seqAsJavaList

https://www.garysieling.com/scaladoc/scala.collection.convert.wrapasjava/2016/02/15/scala__collection_convert_WrapAsJava.html

我还发现了一个很有帮助的 StackOverflow 查询。

Convert from scala.collection.Seq<String> to java.util.List<String> in Java code

但是,当我尝试以下代码时 -

public static void listTopics ()
{
    ZkClient zkClient = connectToZookeeper();
    ZkUtils zkUtils = zookeeperUtility(zkClient);

    List<String> brokerTopics = WrapAsJava.seqAsJavaList(zkUtils.getAllTopics());

    zkClient.close();
}

我收到编译器错误,即无法从静态上下文中引用非静态方法 seqAsJavaList。

我无法实例化 WrapAsJava,所以我不知道如何在这里创建非静态上下文。

StackOverflow 查询得到了这个代码 sn-p 的答案。

import scala.collection.convert.WrapAsJava;

public class Test {
java.util.List<String> convert(scala.collection.Seq<String> seq) {
    return WrapAsJava.seqAsJavaList(seq);
}
}

遗憾的是,它引发了同样的错误。我怎样才能解决这个问题?谢谢!

(这里是zkUtils.getAllTopics()方法)

  def getAllTopics(zkClient: ZkClient): Seq[String] = {
val topics = ZkUtils.getChildrenParentMayNotExist(zkClient, BrokerTopicsPath)
if(topics == null)
  Seq.empty[String]
else
  topics
}

【问题讨论】:

    标签: java scala


    【解决方案1】:

    你可以使用scala.collection.JavaConversions:

    import scala.collection.JavaConversions;
    import scala.collection.immutable.Seq;
    
    Seq<String> strings = ... //
    List<String> javaList = JavaConversions.seqAsJavaList(strings);
    

    【讨论】:

      猜你喜欢
      • 2018-06-29
      • 2023-03-26
      • 1970-01-01
      • 2019-09-10
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 2021-09-17
      相关资源
      最近更新 更多