Groovy:Closure如何在sort()中工作

时间:2016-09-15 10:01:29

标签: list sorting groovy

我找到了一个代码段,如:

def l1 = ["hello","hi","hey"]    
l1.sort{new Random()}

我无法弄清楚一个Random类对象如何用于对列表项进行排序/混洗? Random类对象如何返回Comparable / Comparator对象来执行操作?

在groovy doc中,我找到了声明: 使用给定的Closure对此Iterable进行排序以确定正确的顺序。 但是这里如何使用Random?

1 个答案:

答案 0 :(得分:1)

我怀疑这里的意图是将随机值用作每个条目的Comparable(即使用Iterable.sort(Closure closure)的单参数闭包变体)。正是这些随机值被比较,从而决定了排序顺序。因此,这会导致随机排序顺序。

但是,我不相信这会导致定义明确的行为。文档没有定义是否:

  1. 对迭代的每个元素精确计算一次闭包。
  2. sort应如何回应不一致的Comparable值。
  3. 如果#1不成立,则会生成不一致的值 - 不清楚这是否会导致sort实现做出古怪的事情。