Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java8中反转比较器_Java_Sorting_Java 8_Comparator_Java Stream - Fatal编程技术网

在Java8中反转比较器

在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());

我有一个ArrayList,需要按降序排序。我为它使用
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 8
Comparator
接口有一个
反向的
方法:

您也可以使用
必要时可以方便地连接比较器,例如:

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())如果您要对多个属性进行排序,并且只想反转其中的一些属性,则此示例非常有用!