How do I chain groovy's spaceship operator for multilevel sorting?

2.1k views Asked by At

Groovy has the spaceship operator <=> which provides an easy way to implement comparisons. How can I chain it in a groovier way then the code below? In this example I want to compare the items by price first and then by name if both have the same price.


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

There are 1 answers

0
Leonard Brünings On BEST ANSWER

Since the spaceship operator <=> returns 0 if both are equal and 0 is false according to Groovy Truth, you can use the elvis operator ?: to efficiently chain your sorting criteria.


class Item implements Comparable {
  int price
  String name

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