Leitfaden zur Bestellung von Guave

1. Übersicht

In diesem Artikel werden wir uns die Ordering- Klasse aus der Guava-Bibliothek ansehen .

Die Ordering- Klasse implementiert die Comparator- Schnittstelle und bietet eine nützliche fließende API zum Erstellen und Verketten von Komparatoren.

Als kurze Randnotiz lohnt es sich auch, die neue Comparator.comparing () -API zu betrachten, die ähnliche Funktionen bietet. Hier ist ein praktisches Beispiel für die Verwendung dieser API.

2. Bestellung erstellen

Ordering verfügt über eine nützliche Builder-Methode, die eine ordnungsgemäße Instanz zurückgibt, die in einer sort () -Methode für Sammlungen oder an anderen Stellen verwendet werden kann, an denen eine Instanz von Comparator benötigt wird.

Wir können eine Instanz natürlicher Ordnung erstellen, indem wir die Methode natural () ausführen :

List integers = Arrays.asList(3, 2, 1); integers.sort(Ordering.natural()); assertEquals(Arrays.asList(1,2,3), integers);

Angenommen, wir haben eine Sammlung von Personenobjekten :

class Person { private String name; private Integer age; // standard constructors, getters }

Und wir wollen eine Liste solcher Objekte sortieren Altes Feld. Wir können unsere benutzerdefinierte Bestellung erstellen , die genau das tut, indem wir sie erweitern:

List persons = Arrays.asList(new Person("Michael", 10), new Person("Alice", 3)); Ordering orderingByAge = new Ordering() { @Override public int compare(Person p1, Person p2) { return Ints.compare(p1.age, p2.age); } }; persons.sort(orderingByAge); assertEquals(Arrays.asList(new Person("Alice", 3), new Person("Michael", 10)), persons);

Dann können wir unser orderByAge verwenden und es an die sort () -Methode übergeben.

3. Chaining - Ordnungen

Ein nützliches Merkmal dieser Klasse ist, dass wir verschiedene Bestellarten verketten können. Lassen Sie sich sagen , dass wir eine Sammlung von Personen und wollen wir es von sortieren Altem Feld und haben null Alte Feldwerte am Anfang einer Liste:

List persons = Arrays.asList( new Person("Michael", 10), new Person("Alice", 3), new Person("Thomas", null)); Ordering ordering = Ordering .natural() .nullsFirst() .onResultOf(new Function() { @Override public Comparable apply(Person person) { return person.age; } }); persons.sort(ordering); assertEquals(Arrays.asList( new Person("Thomas", null), new Person("Alice", 3), new Person("Michael", 10)), persons);

Das Wichtigste dabei ist eine Reihenfolge, in der bestimmte Bestellungen ausgeführt werden - die Reihenfolge ist von rechts nach links. Zuerst wird onResultOf () ausgeführt und diese Methode extrahiert das Feld, das wir vergleichen möchten.

Dann wird der Komparator nullFirst () ausgeführt. Aus diesem Grunde wird die resultierende sortierte Sammlung ein hat Person Objekt , das eines hat null als Alter bei Beginn des Listenfeldes.

Am Ende des Sortierprozesses, Altersfelder verglichen mit natürlicher Ordnung als Methode angegeben unter Verwendung von natürlichen () .

4. Fazit

In diesem Artikel haben wir uns die Ordering- Klasse aus der Guava-Bibliothek angesehen, mit der wir flüssigere und elegantere Komparatoren erstellen können . Wir haben unsere benutzerdefinierte Bestellung erstellt, vordefinierte aus der API verwendet und sie verkettet, um eine individuellere Bestellung zu erzielen.

Die Implementierung all dieser Beispiele und Codefragmente finden Sie im GitHub-Projekt - dies ist ein Maven-basiertes Projekt, daher sollte es einfach zu importieren und auszuführen sein, wie es ist.