将Scala seq <string>转换为Java List <string>

时间:2016-04-27 15:50:56

标签: java scala

我在Java工作。我需要将从Apache Kafka中的Scala方法返回的Seq<String>转换为Java List<String>进行处理。

我找到了一个方法可以在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查询对此代码段有一个答案。

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
}

1 个答案:

答案 0 :(得分:3)

您可以使用scala.collection.JavaConversions

import scala.collection.JavaConversions;
import scala.collection.immutable.Seq;

Seq<String> strings = ... //
List<String> javaList = JavaConversions.seqAsJavaList(strings);