Groovy按值自定义地图排序

时间:2012-12-03 15:42:55

标签: sorting groovy map

我有一张地图,例如

m=[
     "james":"silly boy",
     "janny":"Crazy girl",
     "jimmy":"funny man",
     "georges":"massive fella"
];

我希望按其值排序此地图,但忽略大小写(这就是为什么需要自定义排序)。因此我想我必须使用闭包实现自定义排序。但是我在Groovy是全新的,并且一直在努力完成这个非常简单的任务!

期望的结果将是:

["janny":"Crazy girl", "jimmy":"funny man", "georges":"massive fella", "james":"silly boy"]

谢谢!

4 个答案:

答案 0 :(得分:32)

要使用不区分大小写进行排序,请使用

m.sort { it.value.toLowerCase() }

答案 1 :(得分:9)

假设您想要对值进行排序,您可以这样做:

Map m =[ james  :"silly boy",
         janny  :"Crazy girl",
         jimmy  :"funny man",
         georges:"massive fella" ]

Map sorted = m.sort { a, b -> a.value <=> b.value }

答案 2 :(得分:2)

顺便说一句,这里的代码显示了使用和不使用toLowerCase()的不同排序:

Map m =[ james  :"silly boy",
         janny  :"crazy girl",
         jimmy  :"Funny man",
         georges:"massive fella" ]
Map sorted = m.sort { a, b -> a.value <=> b.value }
println sorted
sorted = m.sort { a, b -> a.value.toLowerCase() <=> b.value.toLowerCase() }
println sorted

并打印:

[jimmy:Funny man, janny:crazy girl, georges:massive fella, james:silly boy]
[janny:crazy girl, jimmy:Funny man, georges:massive fella, james:silly boy]

答案 3 :(得分:2)

如果有人在寻找如何在Jenkins管道脚本中工作的方法,则必须为此创建一个带有@NonCPS注释的单独方法:

@NonCPS
def getSorted(def mapSizeMap){
    mapSizeMap.sort(){ a, b -> b.value <=> a.value }
}

然后从管道脚本中调用它。

def sortedMapZoneMap = getSorted(mapZonesMap)

您当然可以在顶部应用“区分大小写”逻辑。