Sorting Groovy自定义按值对映射进行排序

Sorting Groovy自定义按值对映射进行排序,sorting,groovy,map,Sorting,Groovy,Map,我有一张像这样的地图 m=[ "james":"silly boy", "janny":"Crazy girl", "jimmy":"funny man", "georges":"massive fella" ]; 我想按其值对该映射进行排序,但忽略大小写(这就是需要自定义排序的真正原因)。因此,我认为我必须使用闭包实现自定义排序。但我是Groovy的新手,一直在努力完成这个非常简单的任务 预期的结果将是: ["janny":"Crazy girl",

我有一张像这样的地图

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"]

谢谢

假设您的意思是希望按值排序,您可以执行以下操作:

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

Map sorted = m.sort { a, b -> a.value <=> b.value }
Map m=[james:“傻小子”,
珍妮:“疯女孩”,
吉米:“有趣的人”,
乔治:“大块头”]
映射排序=m.sort{a,b->a.value b.value}

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

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

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


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

@NonCPS
def getSorted(def mapSizeMap){
    mapSizeMap.sort(){ a, b -> b.value <=> a.value }
}
@NonCPS
def getSorted(def mapSizeMap){
mapSizeMap.sort(){a,b->b.value a.value}
}
然后从管道脚本调用它

def sortedMapZoneMap=getSorted(mapzonemap)


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

也相当于
m.sort{it.value}
使用区分大小写的自然排序(或排序)。我如何使它不区分大小写?m.sort{a,b->a.value.toLowerCase()b.value.toLowerCase()}是另一个解决方案的正确答案:)已确认,我一直在Jenkins管道中与此进行斗争,您的建议对我有效。谢谢。希望这有更多的投票,这样我就可以直接看到它。实际上,为它创建一个单独的问题是有意义的,这将包括Jenkins pipelein在标题中。那就更容易找到了。我也花了很多时间寻找解决方案:)我花了几个小时在这个问题上,现在偶然发现了这个答案。谢谢,托尼为此单独提出了一个问题:我希望能更容易找到。如果有人能告诉我,我会很高兴:)
[jimmy:Funny man, janny:crazy girl, georges:massive fella, james:silly boy]
[janny:crazy girl, jimmy:Funny man, georges:massive fella, james:silly boy]
@NonCPS
def getSorted(def mapSizeMap){
    mapSizeMap.sort(){ a, b -> b.value <=> a.value }
}