我需要按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() }
我怎样才能做到这一点?
答案 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。所以使用上面的赋值语法。