Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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
  }
}
like image 456
Leonard Brünings Avatar asked Jan 10 '14 15:01

Leonard Brünings


1 Answers

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
  }
}
like image 57
Leonard Brünings Avatar answered Sep 28 '22 07:09

Leonard Brünings