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 }
}