20

我有一张地图,例如

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

4 回答 4

43

要以不区分大小写的方式排序,请使用

m.sort { it.value.toLowerCase() }
于 2012-12-03T15:58:57.400 回答
12

假设你的意思是你想对价值进行排序,你可以这样做:

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

Map sorted = m.sort { a, b -> a.value <=> b.value }
于 2012-12-03T15:47:22.643 回答
7

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

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

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

def sortedMapZoneMap = getSorted(mapZonesMap)

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

于 2019-10-10T08:59:08.330 回答
5

顺便说一句,这里的代码显示了使用和不使用 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]
于 2014-11-26T08:22:14.863 回答