我从多个表中查询数据,每个表都有一个自定义键。我将这些表中的数据放入地图列表中,并希望按id
值对其进行排序。
我最终得到的是:
var g = groups.map(i => Map("id" -> i._1, "job" -> i._2))
var p = people.map(i => Map("id" -> i._1, "job" -> i._2))
var party = g ++ p
这给了我:
var party = List(
Map(id -> 1, job -> Group1),
Map(id -> 2, job -> Group2),
Map(id -> 2>1, job -> Person1Group2)
Map(id -> 1>1, job -> Person1Group1),
Map(id -> 1>2, job -> Person2Group1)
)
但我希望按id
排序,以便我按顺序排列,以便我可以填充树结构:
var party = List(
Map(id -> 1, job -> Group1),
Map(id -> 1>1, job -> Person1Group1),
Map(id -> 1>2, job -> Person2Group1),
Map(id -> 2, job -> Group2),
Map(id -> 2>1, job -> Person1Group2)
)
我该怎么做?
答案 0 :(得分:1)
通过使用案例类对每个Map
中的关联进行微小的重构可以简化后续编码;考虑
case class Item(id: String, job: String)
以及使用(不可变)值,
val g = groups.map(i => Item(i._1, i._2)
val p = people.map(i => Item(i._1, i._2)
然后
(g ++ p).sortBy(_.id)
带来按ID排序的项目列表。
如果您希望按ID分组作业,请考虑
(g ++ p).groupBy(_.id)
从ids将Map
传递到具有共同ID的项目列表。从Map
开始,您可以使用mapValues
来提取实际工作。
答案 1 :(得分:0)
如上所述party.sortBy(_(" id"))应该这样做