32

我只是被小精灵弄湿了。我知道 gremlin 是基于 groovy 的。我在这里找到了文档,但我仍然不确定语法的含义。

我对带有比较器的排序语法如何工作感到有些困惑:

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

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

4

2 回答 2

51

Closureused bysort有两个参数时,它就像传统的Comparator. 也就是说,对于排序期间在两个元素a和之间进行的每次比较b,它返回一个负整数、零或正整数,因为第一个参数小于、等于或大于第二个

在您的特定场景中,比较是使用spaceship operator <=>的结果。换句话说,您正在有效地按升序对元素进行排序。

例如,如果您有 list [ 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;
  }
}
于 2012-09-25T00:29:23.370 回答
8

spaceship 运算符<=>是一个重载运算符,表示compareTo(). 基本上a<=>b是一样的a.compareTo(b)

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

.method{ closureParameters-> statements}

所以你的例子是使用sort()带有闭包的函数,在那个闭包内你使用太空船(比较器)运算符

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

于 2016-02-08T14:19:14.820 回答