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
'programing' 카테고리의 다른 글
| MariaDB Galera Cluster와 함께 사용할 경우 PHPUnit 테스트가 랜덤으로 실패함(읽기/쓰기 사용자) (0) | 2022.10.21 |
|---|---|
| Linux에서 rand()가 Mac보다 훨씬 더 자주 숫자를 반복하는 이유는 무엇입니까? (0) | 2022.10.21 |
| MYSQL에서 SQL을 사용하여 두 날짜 시간 값에서 빼서 몇 분 또는 몇 초 안에 결과를 가져오려면 어떻게 해야 합니까? (0) | 2022.10.21 |
| 두 시간 문자열 사이의 시간 간격 계산 방법 (0) | 2022.10.21 |
| MySQL은 각 행에 고유한 하나의 쿼리 조건에서 여러 행을 삭제합니다. (0) | 2022.10.21 |