使用比较器语法进行groovy排序

时间:2012-09-25 00:17:03

标签: sorting groovy

我只是用gremlin弄湿了脚。据我所知,gremlin基于groovy。我找到了文档here,但我仍然不确定语法的含义。

我对比较器的排序语法如何工作有点困惑:

m.sort{a,b -> a.value <=> b.value}

有人可以解释{}之间的所有不同位是什么意思吗?

2 个答案:

答案 0 :(得分:43)

Closure使用的sort有两个参数时,它就像传统的Comparator一样。也就是说,对于在排序期间完成的每​​个比较,在两个元素ab之间进行的比较,当第一个参数小于时,返回负整数,零或正整数,等于或大于第二个

在您的特定情况下,比较是使用spaceship operator <=>的结果。换句话说,您正在以升序顺序对元素进行有效排序。

例如,如果您有列表[ 3, 2, 1 ],则使用该排序would be [ 1, 2, 3 ]的结果。

因此,m.sort{a,b -> a.value <=> b.value} 大致相当于使用以下compare函数:

int compare(a, b) {
  if (a < b) {
    return -1;
  } else if (a > b) {
    return 1;
  } else {
    return 0;
  }
}

答案 1 :(得分:5)

太空飞船运营商<=>是一个重载运营商,代表compareTo()。基本上a<=>ba.compareTo(b)

相同

您给出的示例是使用带有闭包的sort()函数(如Java8中的lambda)。它的语法如下:

  

.method {closureParameters - &gt; statements}

因此,您的示例使用sort()函数和closure,在该闭包内使用太空船(比较器)运算符

有关运算符重载的更多信息here