反转 Java 8 中的比较器

2022-08-31 09:16:07

我有一个ArrayList,并希望按降序排序。我用它来方法。以下是根据Java API的描述:java.util.stream.Stream.sorted(Comparator)

返回由此流的元素组成的流,该流根据提供的 进行排序。Comparator

此方法返回我一个升序排序。我应该更改哪个参数,只是为了有降序?


答案 1

您可以使用 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

答案 2

您还可以使用 Comparator.compareing(Function, Comparator)
必要时可以方便地链接比较器,例如:

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

推荐