web-dev-qa-db-ja.com

Java 8のコンパレーターを反転します

ArrayListがあり、降順で並べ替えたい。 Java.util.stream.Stream.sorted(Comparator)メソッドに使用します。 Java AP​​Iによる説明は次のとおりです。

指定されたComparatorに従ってソートされた、このストリームの要素で構成されるストリームを返します。

このメソッドは、昇順でソートを返します。降順にするために、どのパラメーターを変更する必要がありますか?

36
Guforu

Comparator.reverseOrder() を使用して、自然順序付けの逆を与えるコンパレータを使用できます。

既存のコンパレーターの順序を逆にする場合は、 Comparator.reversed() を使用できます。

サンプルコード:

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
86
Tunaki

Java 8 Comparatorインターフェースにはreversedメソッドがあります: https://docs.Oracle.com/javase/8/docs/api/Java/util/Comparator.html#reversed--

7
Dici

Comparator.comparing(Function、Comparator) を使用することもできます
必要に応じてコンパレーターを連鎖させると便利です。例:

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