【问题标题】:How to convert Java Map containing List to Scala map如何将包含 List 的 Java Map 转换为 Scala map
【发布时间】:2019-11-20 07:16:14
【问题描述】:

斯卡拉 2.11 有一个jmap 类型的变量:

val jmap: java.util.Map[String, java.util.List[Double]]

jmap 被转换为 Scala 映射:

val smap: Map[String, java.util.List[Double]] = jmap.asScala.toMap

目的是在Scala中将其转换为Map[String, List[Double]] 我找到了这个程序:

smap.mapValues(_.asScala.toList)

但不幸的是,它会生成 MapLike 而不是所需的类型 Map[String, List[Double]]

【问题讨论】:

  • 你使用的是 scala 2.12 还是 2.13?
  • 您应该能够通过使用额外的.toMap 获得Map 而不是MapLike
  • 注意:转换为 Scala List 非常重要;它不是与java.util.List 对应的抽象数据类型。除非你特别需要,否则我更喜欢toSeq
  • 无法重现 scala 2.12 的问题。没关系。 Scala 2.13 说结果类型是MapView,而不是MapLike,但解决了@XavierGuihot

标签: java scala dictionary types


【解决方案1】:

在 Scala 2.13 中尝试

import scala.jdk.CollectionConverters._

val smap: Map[String, List[Double]] = jmap.asScala.view.mapValues(_.asScala.toList).toMap

在 Scala 2.11 中尝试

import scala.collection.JavaConverters._

val smap: Map[String, List[Double]] = jmap.asScala.mapValues(_.asScala.toList).toMap

【讨论】:

  • 如何在 Scala 2.11 中做到这一点
  • 类似选择:mapAsScalaMap(jmap).mapValues(_.asScala.toList)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 2017-07-14
  • 1970-01-01
相关资源
最近更新 更多