2014-01-10 10 views
9

Groovy hat den Raumschiffoperator <=>, der eine einfache Möglichkeit bietet, Vergleiche zu implementieren. Wie kann ich es auf eine groovigere Art und Weise als den Code darunter ketten? In diesem Beispiel möchte ich die Artikel zuerst nach Preis und dann nach Name vergleichen, wenn beide den gleichen Preis haben.Wie kann ich den Raumschiffbetreiber von groovy für die Multilevel-Sortierung verketten?


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 
    } 
} 

Antwort

18

Da das Raumschiff Betreiber <=> 0 zurück, wenn beide gleich sind und 0 ist falsch nach Groovy Wahrheit, können Sie den elvis Operator ?: auf Ihre Sortierkriterien effizient Kette.


class Item implements Comparable { 
    int price 
    String name 

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