【问题标题】:groovy sort with comparator syntax带有比较器语法的常规排序
【发布时间】:2012-09-25 00:17:03
【问题描述】:

我只是被小精灵弄湿了。我知道 gremlin 是基于 groovy 的。我找到了文档here,但我仍然不确定语法是什么意思。

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

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

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

【问题讨论】:

    标签: sorting groovy


    【解决方案1】:

    sort 使用的Closure 有两个参数时,它的作用类似于传统的Comparator。也就是说,对于排序期间进行的每个比较,在两个元素ab 之间,它返回一个负整数、零或正整数,因为第一个参数小于、等于、或大于秒

    在您的特定场景中,比较是使用spaceship operator &lt;=&gt; 的结果。换句话说,您实际上是按升序顺序对元素进行排序。

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

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

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

    【讨论】:

    • 那么,a,b -&gt; 只是将值 ab 传递给比较器?
    • @F21:是的,有点像。就像一个函数,有两个参数,用于根据返回spaceship算子的函数体进行排序。
    • 我不知道什么是&lt;=&gt; 宇宙飞船操作员。 Wiki 帮助不大
    【解决方案2】:

    宇宙飞船运算符&lt;=&gt; 是一个重载运算符,表示compareTo()。基本上a&lt;=&gt;ba.compareTo(b)是一样的

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

    .method{closureParameters -> statements}

    所以你的例子是使用带有closuresort() 函数,在该闭包内你使用宇宙飞船(比较器)运算符

    更多关于运算符重载here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2013-09-24
      • 2023-03-22
      • 2022-07-22
      • 2013-08-21
      • 1970-01-01
      相关资源
      最近更新 更多