按值对 map 内的 map 进行排序

标签 sorting groovy map

我正在尝试在 Groovy 中对以 map 为值的 map 进行排序。我想遍历 map 并打印出按 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 排序。

哪位大神可以帮忙解答一下,不胜感激,谢谢!

最佳答案

这应该这样做:

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

关于按值对 map 内的 map 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10131759/

相关文章:

r - 如何从ggmap中删除边距

algorithm - 具有 O(n * log(n)) 时间复杂度和 O(1) 空间复杂度的稳定比较排序

java - 使用 groovy 匹配字符串结尾

服务内部的 Grails Quartz 和线程

jenkins - 使用 Jenkins Pipeline 脚本,从并行步骤访问全局变量是否安全?

c++ - 根据值对 map 进行排序

javascript - 将 PNG 或 JPEG 用于带有 OpenLayers 的 map (缩放/缩放问题)

java - 根据Java中的字符串列表对整数列表进行排序

algorithm - 按出现频率的顺序打印列表唯一项目

javascript - 自定义日期范围排序