反转 Java 8 中的比较器
2022-08-31 09:16:07
我有一个ArrayList,并希望按降序排序。我用它来方法。以下是根据Java API的描述:java.util.stream.Stream.sorted(Comparator)
返回由此流的元素组成的流,该流根据提供的 进行排序。
Comparator
此方法返回我一个升序排序。我应该更改哪个参数,只是为了有降序?
我有一个ArrayList,并希望按降序排序。我用它来方法。以下是根据Java API的描述:java.util.stream.Stream.sorted(Comparator)
返回由此流的元素组成的流,该流根据提供的 进行排序。
Comparator
此方法返回我一个升序排序。我应该更改哪个参数,只是为了有降序?
您可以使用 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
您还可以使用 Comparator.compareing(Function, Comparator)
必要时可以方便地链接比较器,例如:
Comparator<SomeEntity> ENTITY_COMPARATOR =
Comparator.comparing(SomeEntity::getProperty1, Comparator.reverseOrder())
.thenComparingInt(SomeEntity::getProperty2)
.thenComparing(SomeEntity::getProperty3, Comparator.reverseOrder());