如何将groovy的太空船操作员连接起来进行多级排序?

时间:2014-01-10 15:20:12

标签: groovy chaining spaceship-operator

Groovy拥有太空飞船运营商<=>,它提供了一种实施比较的简便方法。我怎样才能以更加时髦的方式将其链接到下面的代码?在这个例子中,我想首先按价格比较物品,然后按名称比较物品价格。


class Item implements Comparable {
  int price
  String name

  int compareTo(Item other) {
    int result = price <=> other.price
    if (result == 0) {
      result = name <=> other.name
    }
    return result
  }
}

1 个答案:

答案 0 :(得分:22)

由于根据Groovy Truth,如果两者相等并且0为假,则宇宙飞船运算符<=>返回0,您可以使用elvis运算符?:来有效地链接排序标准。


class Item implements Comparable {
  int price
  String name

  int compareTo(Item other) {
    price <=> other.price ?: name <=> other.name
  }
}