【发布时间】:2017-07-05 13:17:01
【问题描述】:
我正在尝试在我的 Java 程序中使用 Scala 库,但在将复杂的 Scala Map 转换为 Java 时遇到了一些困难。
我使用的 Scala 对象方法具有以下返回类型:scala.collection.mutable.Map<String, Map<Object, Seq<Object>>>
如何将其转换为 Java 等效的 Map<String, Map<Object, List<Object>>> ?
我已经玩过 JavaConversions 和 JavaConvertors 包,但没有运气:(
public void getPartitionAssignmentForTopics(final List<String> topics) {
final Seq<String> seqTopics = scala.collection.JavaConversions.asScalaBuffer(topics).toList();
scala.collection.mutable.Map<String, Map<Object, Seq<Object>>> map2 = zkUtils
.getPartitionAssignmentForTopics(seqTopics);
val map:scala.collection.mutable.Map[String, Map[Object, Seq[Object]]] = scala.collection.mutable.Map()
map:
collection.mutable.Map[String, Map[Object, Seq[Object]]] =Map()
map.mapValues(_.mapValues(_.asJava).asJava).asJava
res2:
java.util.Map[String, java.util.Map[Object, java.util.List[Object]]] ={}
}
这不会编译:)
我的意思是我使用以下代码将 Scala Seq 转换为 Java List:
scala.collection.JavaConversions.seqAsJavaList(zkUtils.getAllTopics());
【问题讨论】:
-
您所说的“玩过但没有运气”到底是什么意思?你发现
JavaConversions.mapAsJavaMap了吗?使用它有什么“不走运”的地方? -
java.util.Map<String, Map<Object, Seq<Object>>> stringMapMap = JavaConversions.mapAsJavaMap(map2);然后转换每个项目应该可以工作吗? -
也许应该……也许,你应该,至少尝试一下?
标签: java scala collections