我在处理这个 Scala 集合时做错了什么?
What am I doing wrong in handling this Scala collection?
给定一个 List[CaseClass] 我想按两个 class 属性对元素进行分组并获得嵌套的 Maps
case class CaseClass(
a String,
b String,
c String
)
val collection: List[CaseClass] = List(
CaseClass("a1","b1","c1"),
CaseClass("a1","b1","c2"),
CaseClass("a1","b2","c3"),
CaseClass("a2","b2","c4"),
CaseClass("a2","b2","c5"),
)
val res = collection.groupBy(_.a).map{ case (k,v) => v.groupBy(_.b)}
我得到的是按 "b" 属性分组的 Map[String, CaseClass] 对象。但我想得到 Map[String, Map[String, CaseClass]] 按 "a" (外部地图)和 "b" (内部地图)分组,如下所示:
Map("a1" ->
Map("b1" -> List( CaseClass("a1","b1","c1"),
CaseClass("a1","b1","c2"))),
Map("b2" -> List( CaseClass("a1","b2","c3"))),
"a2" ->
Map("b2" -> List( CaseClass("a2","b2","c4"),
CaseClass("a2","b2","c5"))))
我应该如何更改我的代码?
问题是 (k,v) => v.groupBy(_.b)
需要将 (key, value)
映射到 (key, value)
,但这是将 (key, value)
映射到 value
。密钥正在被丢弃。
所以你只需要保留密钥:
val res = collection.groupBy(_.a).map{ case (k,v) => (k, v.groupBy(_.b)) }
给定一个 List[CaseClass] 我想按两个 class 属性对元素进行分组并获得嵌套的 Maps
case class CaseClass(
a String,
b String,
c String
)
val collection: List[CaseClass] = List(
CaseClass("a1","b1","c1"),
CaseClass("a1","b1","c2"),
CaseClass("a1","b2","c3"),
CaseClass("a2","b2","c4"),
CaseClass("a2","b2","c5"),
)
val res = collection.groupBy(_.a).map{ case (k,v) => v.groupBy(_.b)}
我得到的是按 "b" 属性分组的 Map[String, CaseClass] 对象。但我想得到 Map[String, Map[String, CaseClass]] 按 "a" (外部地图)和 "b" (内部地图)分组,如下所示:
Map("a1" ->
Map("b1" -> List( CaseClass("a1","b1","c1"),
CaseClass("a1","b1","c2"))),
Map("b2" -> List( CaseClass("a1","b2","c3"))),
"a2" ->
Map("b2" -> List( CaseClass("a2","b2","c4"),
CaseClass("a2","b2","c5"))))
我应该如何更改我的代码?
问题是 (k,v) => v.groupBy(_.b)
需要将 (key, value)
映射到 (key, value)
,但这是将 (key, value)
映射到 value
。密钥正在被丢弃。
所以你只需要保留密钥:
val res = collection.groupBy(_.a).map{ case (k,v) => (k, v.groupBy(_.b)) }