当前位置: 首页 > 知识库问答 >
问题:

转换Java地图到Scala地图

徐卓
2023-03-14

我有一个java map:java.util.Map

我使用了MapAsscalMap,但结果并不是我想要的,结果是:Map[SomeObject,java.util.Collection[OtherObject]]。如何将集合转换为集合?

注意:实际上我最初的问题是转换google的ArrayListMultimap


共有3个答案

闻人越
2023-03-14

如果必须从java执行此操作:

List<Tuple2<A, B>> tuples = javaMap.entrySet().stream()
            .map(e -> Tuple2.apply(e.getKey(), e.getValue()))
            .collect(Collectors.toList());

scala.collection.Map scalaMap = scala.collection.Map$.MODULE$.apply(JavaConversions.asScalaBuffer(tuples).toSeq());

基于:https://stackoverflow.com/a/45373345/5209935

颛孙智勇
2023-03-14

不可变映射myJavaMap。阿斯卡拉。toMap

可变映射myJavaMap。协会

弓磊
2023-03-14

编辑:建议现在使用JavaConverters。ASCALA方法:

import scala.collection.JavaConverters._
val myScalaMap = myJavaMap.asScala.mapValues(_.asScala.toSet)

这样做的好处是不使用神奇的隐式转换,而是显式调用. asScala,同时保持干净和考虑。

JavaConversion给出的原始答案:

您可以使用scala。收集JavaConversions要在Java和Scala之间隐式转换:

import scala.collection.JavaConversions._
val myScalaMap = myJavaMap.mapValues(_.toSet)

调用mapValues将触发从javaMap到scalaMap的隐式转换,然后调用java集合上的toSet,隐式将其转换为scala集合,然后再转换为Set

默认情况下,它返回一个可变的Map,您可以通过附加的. toMap获得一个不可变的。

简短的例子:

scala> val a: java.util.Map[String, java.util.Collection[String]] = new java.util.HashMap[String, java.util.Collection[String]]
a: java.util.Map[String,java.util.Collection[String]] = {}

scala> val b = new java.util.ArrayList[String]
b: java.util.ArrayList[String] = []

scala> b.add("hi")
res5: Boolean = true

scala> a.put("a", b)
res6: java.util.Collection[String] = []

scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._

scala> val c = a.mapValues(_.toSet)
c: scala.collection.Map[String,scala.collection.immutable.Set[String]] = Map(a -> Set(hi))

scala> c.toMap
res7: scala.collection.immutable.Map[String,scala.collection.immutable.Set[String]] = Map(a -> Set(hi))
 类似资料:
  • 问题内容: 我需要转换为。我已经为这个问题苦苦挣扎了一段时间。 很明显如何转换为: 但是我找不到解决最初的问题。有一些易于使用的Java-8方法吗? 问题答案: 我想您很亲密,您需要将这些条目添加到a 并从那里收集。我使用了已经存在的,但是您也可以使用某种。 好吧,如果您不想增加这些实例的额外开销,则可以做些不同:

  • 问题内容: 如何转换 为? 这不起作用: 问题答案: 如果您只包含,则可以这样操作: 如果不是,则可以替换 为。

  • 问题内容: 我有一个Map是一个到值列表的映射,但是我需要将其求逆,以便 变成 例如我有 我想看看 除了要遍历映射条目并创建set条目(如果不存在)并添加到列表等之外,Java 8中还有什么更简单的方法可以做到这一点?我一直认为这确实很明显,但我无法解决。 提前致谢 问题答案: 未经测试,但是您可以执行以下操作:

  • 问题内容: 我想转换一个从Java中8是这样的: 因为我有一个字符串列表,所以我想创建一个Map,键是列表的字符串,值是Integer(零)。 我的目标是计算字符串列表的元素(在我的代码中稍后)。 我知道以“旧”方式进行转换很容易; 但我想知道是否还有Java 8解决方案。 问题答案: 如前所述,参数必须是函数,因此必须更改为(可以使用任何其他参数名称代替)。 但是请注意,如果中存在重复项,此操作

  • 问题内容: 我一直在研究Jackson,但似乎我必须将Map转换为JSON,然后将所得的JSON转换为POJO。 有没有一种方法可以将Map直接转换为POJO? 问题答案: 好吧,您也可以使用Jackson来实现。(由于您正在考虑使用杰克逊,因此似乎更舒适)。 使用的方法: 无需转换为JSON字符串或其他内容;直接转换的速度要快得多。

  • 如何将此地图/平面图转换为便于理解的图形,请解释其工作原理,谢谢。