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

1

12

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
  }
}
Endora answered 10/1, 2014 at 15:20 Comment(0)
E
33

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
  }
}
Endora answered 10/1, 2014 at 15:20 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.