【问题标题】:Scala: Convert a java list of maps to scala mapScala:将映射的java列表转换为scala映射
【发布时间】:2018-07-06 17:16:41
【问题描述】:

我有一个 java HashMaps 列表,如下所示

List[java.util.Map[String,String]] = List({id=1000, sId=1}, {id=2000, sId=1}, {id=3000, sId=2}, {id=3000, sId=1})

如何将其转换为字符串 Map,List[String]? 例如

1000 -> [1]
2000 -> [1]
3000 -> [2,1]

【问题讨论】:

标签: scala collections


【解决方案1】:

您可以使用JavaConversions 允许通过toMapjava.util.Map 转换为scala.collection.immutable.Map。至于从List of Map[K, V] 转换为Map[K, List[V]],这里有一种使用groupBy-mapValues 的方法:

val l: List[java.util.Map[String,String]] = List(
  new java.util.HashMap[String, String] { put("id", "1000"); put("sId", "1") },
  new java.util.HashMap[String, String] { put("id", "2000"); put("sId", "1") },
  new java.util.HashMap[String, String] { put("id", "3000"); put("sId", "2") },
  new java.util.HashMap[String, String] { put("id", "3000"); put("sId", "1") }
)
// l: List[java.util.Map[String,String]] =
//   List({id=1000, sId=1}, {id=2000, sId=1}, {id=3000, sId=2}, {id=3000, sId=1})

import scala.collection.JavaConversions._

l.map(_.toMap.toList.map(_._2)).
  groupBy(_(0)).
  mapValues(_.map(_(1)))
// res1: scala.collection.immutable.Map[String,List[String]] =
//   Map(3000 -> List(2, 1), 1000 -> List(1), 2000 -> List(1))

【讨论】:

    猜你喜欢
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2020-01-05
    • 2017-03-10
    • 2017-05-23
    • 1970-01-01
    相关资源
    最近更新 更多