Guf*_*oru 44 java sorting comparator java-8 java-stream
我有一个ArrayList,并希望按降序排序.我用它来做法java.util.stream.Stream.sorted(Comparator).这是根据Java API的描述:
返回由此流的元素组成的流,并根据提供的内容进行排序
Comparator.
这个方法给我一个升序排序.我应该更改哪个参数,只是为了降序?
Tun*_*aki 96
您可以使用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
Run Code Online (Sandbox Code Playgroud)
小智 22
也可以使用Comparator.comparing(Function, Comparator)
必要时链式比较器很方便,例如:
Comparator<SomeEntity> ENTITY_COMPARATOR = comparing(SomeEntity::getProperty1, reverseOrder())
.thenComparingInt(SomeEntity::getProperty2)
.thenComparing(SomeEntity::getProperty3, reverseOrder());
Run Code Online (Sandbox Code Playgroud)
Java 8 Comparator接口有一个reversed方法:https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#reversed--
小智 5
我发现这个问题搜索当你有一个自定义比较器时反转顺序并且反转是有条件的(你可以做或不做)。
匹诺曹提出的想法对我很有帮助。
所以这是代码:
int order = requestedOrder.equals("asc") ? 1 : -1;
Collections.sort(List<CustomObj>, new Comparator<CustomObj>() {
public int compare(CustomObj first, CustomObj scnd) {
return first.getComparableParam().compareTo(scnd.getComparableParam()) * order;
}
});
Run Code Online (Sandbox Code Playgroud)
希望它将来能帮助别人