按值大小排序()

时间:2018-03-19 19:18:07

标签: groovy

我需要按source值大小()降序排序:

def source = 
[(firstString): [3, 2, 1], 
(secondString): [3, 2, 1, 4],
(thirdString): [3]]

expected:

[(secondString): [3, 2, 1, 4],
(firstString): [3, 2, 1],
(thirdString): [3]]

我试过这样做:

source.sort { -it.value.size() }

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

以下是您预期结果的工作代码:

def source =  [
"(firstString)": [3, 2, 1],
"(secondString)": [3, 2, 1, 4],
"(thirdString)": [3]
]


def sortedResult  = source.sort { -it.value.size()}
println sortedResult

在groovy控制台上的工作示例:https://groovyconsole.appspot.com/script/5104124974596096

答案 1 :(得分:2)

将Closure作为参数的排序不会改变原始Map。它只返回一个新地图,因此您需要指定它(您可以将其分配给自己)。

source = source.sort { -it.value.size() }

使用Collections,还有另一种类型的排序,它采用布尔值和闭包值。在这种情况下,布尔值表示您是要改变原始Collection还是只返回一个新的Collection。

a = [1,3,2]
a.sort (true) { it }
assert a = [1,2,3]

这并不适用于Map。所以使用上面的赋值语法。