在Java8中反转比较器
我有一个ArrayList,需要按降序排序。我为它使用在Java8中反转比较器,java,sorting,java-8,comparator,java-stream,Java,Sorting,Java 8,Comparator,Java Stream,我有一个ArrayList,需要按降序排序。我为它使用java.util.stream.stream.sorted(Comparator)方法。以下是针对Java API的描述: 返回由此流的元素组成的流,并根据提供的比较器进行排序 此方法返回升序排序。我应该更改哪个参数,以获得降序 您可以使用比较器给出与自然顺序相反的结果 如果要反转现有比较器的顺序,可以使用 示例代码: Stream.of(1, 4, 2, 5) .sorted(Comparator.reverseOrder());
java.util.stream.stream.sorted(Comparator)
方法。以下是针对Java API的描述:
返回由此流的元素组成的流,并根据提供的比较器进行排序
此方法返回升序排序。我应该更改哪个参数,以获得降序 您可以使用比较器给出与自然顺序相反的结果
如果要反转现有比较器的顺序,可以使用
示例代码:
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
Java 8Comparator
接口有一个反向的方法:您也可以使用
必要时可以方便地连接比较器,例如:
Comparator<SomeEntity> ENTITY_COMPARATOR = comparing(SomeEntity::getProperty1, reverseOrder())
.thenComparingInt(SomeEntity::getProperty2)
.thenComparing(SomeEntity::getProperty3, reverseOrder());
Comparator ENTITY\u Comparator=比较(SomeEntity::getProperty1,reverseOrder())
.thenComparingInt(SomeEntity::getProperty2)
.Then比较(SomeEntity::getProperty3,reverseOrder());
为什么不扩展现有comperator并覆盖super和nor结果呢。
Comperator接口的实现不是必需的,但它使发生的事情更加清楚
结果,您得到了一个易于重用的类文件、可测试的单元步骤和清晰的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;
}
}
公共类NorCoperator扩展现有Comperator实现Comparator{
@凌驾
公共int比较(MyClass a、MyClass b)引发异常{
返回super。比较(a,b)*-1;
}
}
当然要更改比较器行为。比较器实体\u Comparator=Comparator。比较(SomeEntity::getProperty1,reverseOrder())如果您要对多个属性进行排序,并且只想反转其中的一些属性,则此示例非常有用!