如何在scala中对地图列表进行排序?

时间:2015-04-16 11:04:24

标签: scala

我从多个表中查询数据,每个表都有一个自定义键。我将这些表中的数据放入地图列表中,并希望按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)
)

我该怎么做?

2 个答案:

答案 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"))应该这样做