我有一个ArrayList,并希望按降序排序。我用它java.util.stream.Stream.sorted(Comparator)
方法。以下是根据Java API的描述:
返回由此流的元素组成的流,并根据提供的
Comparator
进行排序。
这个方法按升序返回给我。我应该更改哪个参数,只是为了降序?
答案 0 :(得分:75)
您可以使用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
答案 1 :(得分:6)
Java 8 Comparator
界面使用reversed
方法:https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#reversed--
答案 2 :(得分:1)
您也可以使用Comparator.comparing(Function, Comparator)
必要时链接比较器很方便,例如:
Comparator<SomeEntity> ENTITY_COMPARATOR = comparing(SomeEntity::getProperty1, reverseOrder())
.thenComparingInt(SomeEntity::getProperty2)
.thenComparing(SomeEntity::getProperty3, reverseOrder());
答案 3 :(得分:-2)
为什么不扩展现有的编译器并覆盖super和结果。 编译器接口的实现不是必需的,但可以使事情更加清楚。
因此,您将获得一个易于重用的类文件,可测试的单元步骤并清除javadoc。
public class NorCoperator extends ExistingComperator implements Comparator<MyClass> {
@Override
public int compare(MyClass a, MyClass b) throws Exception {
return super.compare(a, b)*-1;
}
}