2015-04-16 50 views
0

我从多个表中查询数据,并且每个数据都有一个定制的键。我将这些表中的数据放入地图列表中,并希望按照id的值进行排序。如何在scala中对地图列表进行排序?

我最终得到的是:

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) 
) 

我该怎么做?

回答

1

通过使用case类对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) 

它提供了从ID的Map到与普通ID项目的列表。从Map可以使用mapValues来提取实际的作业。

+0

谢谢榆树,工作。但我的例子被简化了,实际上我的项目中需要超过22个不同的字段。我得到一个错误,说该项目不能超过22个字段。有什么建议么? – user3710760

+0

斯卡拉2.11。*可能会克服这个限制... – elm

+0

好的谢谢。是否有可能有一个地图(星期一:字符串,星期二:字符串)内的项目? – user3710760

0

as hinted above party.sortBy(_(“id”))should do it

相关问题