programing

Java 8에서 비교기 반전

goodjava 2022. 10. 21. 21:24

Java 8에서 비교기 반전

Array List가 있는데 내림차순으로 정렬하고 싶습니다.나는 그것을 사용한다.java.util.stream.Stream.sorted(Comparator)방법.Java API에 따른 설명은 다음과 같습니다.

지정된 대로 정렬된 이 스트림의 요소로 구성된 스트림을 반환합니다.Comparator.

이 메서드는 오름차순의 정렬을 반환합니다.내림차순을 가지려면 어떤 파라미터를 변경해야 합니까?

자연 순서의 역순을 제공하는 비교기를 사용할 수 있습니다.

기존 비교기의 순서를 되돌리려면 를 사용합니다.

샘플 코드:

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.comparing(함수, Comparator)을 사용할 수도 있습니다.
예를 들어 다음과 같이 필요할 때 대조군을 체인하는 것이 편리합니다.

Comparator<SomeEntity> ENTITY_COMPARATOR = 
        Comparator.comparing(SomeEntity::getProperty1, Comparator.reverseOrder())
        .thenComparingInt(SomeEntity::getProperty2)
        .thenComparing(SomeEntity::getProperty3, Comparator.reverseOrder());

자바 8Comparator인터페이스에는reversed방법 : https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#reversed--

이 질문은 커스텀 컴퍼레이터가 있고, 그 반대는 조건부여(할 수 있는지 없는지)일 때 순서를 반대로 하기 위한 것입니다.

피노키오가 제안한 아이디어가 나를 도왔다.

코드는 다음과 같습니다.

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;
    }
});

미래에 다른 사람에게 도움이 되길 바란다.

기존 컴파일러를 확장하여 슈퍼 및 결과를 덮어쓰지 않는 이유는 무엇입니까?Comperator Interface의 실장은 번거롭지는 않지만 어떤 일이 일어나는지 보다 명확하게 알 수 있습니다.

그 결과 재사용이 용이한 클래스 파일, 테스트 가능한 유닛 스텝 및 클리어 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;
    }
}

언급URL : https://stackoverflow.com/questions/32995559/reverse-a-comparator-in-java-8