【问题标题】:Sorting maps within maps by value按值对地图内的地图进行排序
【发布时间】:2012-04-25 06:46:19
【问题描述】:

我正在尝试在 Groovy 中对具有映射作为值的映射进行排序。我想遍历地图并打印出按 lastName 和 firstName 值排序的值。所以在下面的例子中:

def m = 
[1:[firstName:'John', lastName:'Smith', email:'john@john.com'], 
2:[firstName:'Amy',  lastName:'Madigan', email:'amy@amy.com'], 
3:[firstName:'Lucy', lastName:'B',      email:'lucy@lucy.com'], 
4:[firstName:'Ella', lastName:'B',      email:'ella@ella.com'], 
5:[firstName:'Pete', lastName:'Dog',    email:'pete@dog.com']]

期望的结果是:

[firstName:'Ella', lastName:'B',      email:'ella@ella.com']
[firstName:'Lucy', lastName:'B',      email:'lucy@lucy.com']
[firstName:'Pete', lastName:'Dog',    email:'pete@dog.com']
[firstName:'Amy',  lastName:'Madigan', email:'amy@amy.com']
[firstName:'John', lastName:'Smith', email:'john@john.com']

我试过 m.sort{it.value.lastName&&it.value.firstName} 和 m.sort{[it.value.lastName, it.value.firstName]}。按 m.sort{it.value.lastName} 排序有效,但不按 firstName 排序。

谁能帮忙解决一下,不胜感激,谢谢!

【问题讨论】:

  • 我认为这是 this other question 的副本。我们是否可以将它们标记为重复项,或者将它们合并到一个更通用和更具描述性的标题下?

标签: sorting groovy map


【解决方案1】:

应该这样做:

m.values().sort { a, b ->
  a.lastName <=> b.lastName ?: a.firstName <=> b.firstName
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多