wake-up-neo.com

Umkehren eines Komparators in Java 8

Ich habe eine ArrayList und möchte sie in absteigender Reihenfolge sortieren. Ich benutze dafür Java.util.stream.Stream.sorted(Comparator) Methode. Hier ist eine Beschreibung gemäß Java API:

Gibt einen Stream zurück, der aus den Elementen dieses Streams besteht, sortiert nach der angegebenen Comparator.

diese Methoden liefern eine Sortierung mit aufsteigender Reihenfolge. Welchen Parameter sollte ich ändern, nur um die absteigende Reihenfolge zu haben? 

26
Guforu

Sie können Comparator.reverseOrder() verwenden, um einen Komparator zu haben, der die umgekehrte Reihenfolge der natürlichen Ordnung einstellt.

Wenn Sie die Reihenfolge eines vorhandenen Komparators umkehren möchten, können Sie Comparator.reversed() verwenden.

Beispielcode:

Stream.of(1, 4, 2, 5)
    .sorted(Comparator.reverseOrder()); 
    // stream is now [5, 4, 2, 1]

Stream.of("foo", "test", "a")
    .sorted(Comparator.comparingInt(String::length).reversed()); 
    // stream is now [test, foo, a], sorted by descending length
67
Tunaki

Java 8 Comparator-Schnittstelle verfügt über eine reversed-Methode: https://docs.Oracle.com/javase/8/docs/api/Java/util/Comparator.html#reversed--

6
Dici

Sie können auch Comparator.comparing (Function, Comparator) verwenden
Es ist zweckmäßig, Komparatoren bei Bedarf zu verketten, z.

Comparator<SomeEntity> ENTITY_COMPARATOR = comparing(SomeEntity::getProperty1, reverseOrder())
        .thenComparingInt(SomeEntity::getProperty2)
        .thenComparing(SomeEntity::getProperty3, reverseOrder());
1
dim42