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

F21*_*F21 29 sorting groovy

我只是用gremlin弄湿了脚.据我所知,gremlin基于groovy.我在这里找到了文档,但我仍然不确定语法是什么意思.

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

m.sort{a,b -> a.value <=> b.value}
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下所有不同的位{}意思吗?

Joã*_*lva 45

Closure使用者sort有两个参数时,它就像传统的一样Comparator.即,对于被排序期间完成,两个元件之间的每个比较ab,它作为第一个参数大于第二小于,等于或大于返回一个负整数,零或正整数.

在您的特定情况下,比较是使用太空船运营商 的结果<=>.换句话说,您正在按升序对元素进行有效排序.

例如,如果您有列表[ 3, 2, 1 ],那么使用该排序的结果将是 [ 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我不明白什么是“&lt;=&gt;”宇宙飞船操作员。维基百科没有太大帮助 (2认同)

Val*_*i_K 6

宇宙飞船运营商<=>是一个超载的运营商并代表compareTo().基本上a<=>b是一样的a.compareTo(b)

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

.method { closureParameters- > statements}

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

更多关于运算符重载的信息