Groovy 按值大小排序()

Groovy 按值大小排序(),groovy,Groovy,我需要按sourcevalue size()降序排序: 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()

我需要按
source
value size()降序排序:

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

如何实现这一点?

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

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


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

groovy控制台上的工作示例:

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

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


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

groovy控制台上的工作示例:

将闭包作为参数的排序不会改变原始映射。它只返回一个新映射,因此您需要分配它(您可以将其分配给自身)

对于,还有另一种排序类型,它接受布尔值和闭包。在本例中,布尔值指示您是要更改原始集合还是只返回新集合

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

这不适用于任何人。因此,请使用上面的赋值语法。

将闭包作为参数的排序不会改变原始映射。它只返回一个新映射,因此您需要分配它(您可以将其分配给自身)

对于,还有另一种排序类型,它接受布尔值和闭包。在本例中,布尔值指示您是要更改原始集合还是只返回新集合

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

这不适用于任何人。因此,请使用上面的赋值语法。

如果要比较排序列表是否与预期列表匹配,请执行
expected==source.sort{-it.value.size()}
而不是
expected=expected.sort{-it.value.size()}
。您在示例中对预期列表进行排序,并使用赋值运算符而不是相等。@Szymonstephank,我已经编辑了这个问题。我需要按值大小对源代码进行排序。像我尝试的那样分类,根本不起作用。我得到了相同的结果:/But
source.sort{-it.value.size()}==expected
。您粘贴的排序代码已经创建了一个排序列表,如
[secondString:[3,2,1,4],firstString:[3,2,1],thirdString:[3]]
。在这里,我得到了一个无序列表,好像
source
从未排序过一样。
source.sort{-it.value.size()}
创建了一个新的排序列表,它不会改变您调用排序的列表。这就是为什么
source.sort{-it.value.size()}
的结果等于
expected
source.sort{-it.value.size()}==expected
如果要比较排序列表是否与预期列表匹配,请改为
expected==source.sort{-it.value.size()
。您在示例中对预期列表进行排序,并使用赋值运算符而不是相等。@Szymonstephank,我已经编辑了这个问题。我需要按值大小对源代码进行排序。像我尝试的那样分类,根本不起作用。我得到了相同的结果:/But
source.sort{-it.value.size()}==expected
。您粘贴的排序代码已经创建了一个排序列表,如
[secondString:[3,2,1,4],firstString:[3,2,1],thirdString:[3]]
。在这里,我得到了一个无序列表,好像
source
从未排序过一样。
source.sort{-it.value.size()}
创建了一个新的排序列表,它不会改变您调用排序的列表。这就是为什么
source.sort{-it.value.size()}
的结果等于
expected
source.sort{-it.value.size()}==expected
就是这样!工作如期进行。谢谢你,杰里米,就这样!工作如期进行。谢谢你,@JeremyHunt也工作得很好!谢谢你,尼廷!工作也很好!谢谢你,尼廷!