[Java] 람다 스트림을 이용한 코딩 테스트 준비 - Comparator

SlowAnd·2023년 12월 29일
0

Today I Learned Java

목록 보기
1/8
post-thumbnail

Comparator (스트림 sorted 연산을 위해 반드시 알아야함)

  • Java의 Comparator 인터페이스
    Java의 Comparator 인터페이스는 객체들을 특정 기준에 따라 비교하는 메커니즘을 제공합니다. 주로 객체 컬렉션을 정렬할 때 사용되며, java.util 패키지에 속해 있습니다. Comparator는 두 객체를 비교하는 compare 메서드를 정의하며, 자바 8부터는 여러 유틸리티 메서드를 추가적으로 제공합니다.

Comparator의 주요 특징

사용자 정의 정렬: 객체들을 사용자가 정의한 기준에 따라 정렬할 수 있습니다.

  • 익명 클래스 또는 람다 표현식 사용: 객체를 비교하는 로직을 익명 클래스 또는 람다 표현식을 사용하여 간결하게 구현할 수 있습니다.
  • 함수형 인터페이스: Comparator는 함수형 인터페이스이므로, 람다 표현식과 함께 사용될 수 있습니다.
  • 체인 비교: 여러 비교자(comparators)를 연결하여 복잡한 정렬 기준을 만들 수 있습니다.
    역정렬 지원: 주어진 비교자의 반대 순서로 정렬하는 기능을 제공합니다.

Comparator의 메서드

1. 기본 메서드

compare(T o1, T o2): 두 객체 o1과 o2를 비교합니다.

equals(Object obj): 지정된 객체와 이 비교자가 같은지 비교합니다.

2. 디폴트 메서드 (Java 8 이상)

reversed(): 비교 순서를 반대로 하는 Comparator를 반환합니다.

thenComparing(Comparator<? super T> other): 추가적인 Comparator를 연쇄적으로 적용합니다.

thenComparing(Function<? super T,? extends U> keyExtractor): 키 추출 함수를 기반으로 하는 Comparator를 연쇄적으로 적용합니다.

thenComparing(Function<? super T,? extends U> keyExtractor, Comparator<? super U> keyComparator): 키 추출 함수와 해당 키를 비교하는 Comparator를 기반으로 연쇄적으로 적용합니다.

thenComparingInt(ToIntFunction<? super T> keyExtractor): int 키를 추출하는 함수를 기반으로 하는 Comparator를 연쇄적으로 적용합니다.

thenComparingLong(ToLongFunction<? super T> keyExtractor): long 키를 추출하는 함수를 기반으로 하는 Comparator를 연쇄적으로 적용합니다.

thenComparingDouble(ToDoubleFunction<? super T> keyExtractor): double 키를 추출하는 함수를 기반으로 하는 Comparator를 연쇄적으로 적용합니다.

3. 정적 메서드 (Java 8 이상)

naturalOrder(): 자연 순서를 사용하는 Comparator를 반환합니다.

reverseOrder(): 역순 자연 순서를 사용하는 Comparator를 반환합니다.

nullsFirst(Comparator<? super T> comparator): null 값을 가진 요소를 우선하는 Comparator를 반환합니다.

nullsLast(Comparator<? super T> comparator): null 값을 가진 요소를 마지막으로 하는 Comparator를 반환합니다.

comparing(Function<? super T, ? extends U> keyExtractor): 키 추출 함수를 기반으로 하는 Comparator를 생성합니다.

comparing(Function<? super T, ? extends U> keyExtractor, Comparator<? super U> keyComparator): 키 추출 함수와 해당 키를 비교하는 Comparator를 기반으로 하는 Comparator를 생성합니다.

comparingInt(ToIntFunction<? super T> keyExtractor): int 키를 추출하는 함수를 기반으로 하는 Comparator를 생성합니다.

comparingLong(ToLongFunction<? super T> keyExtractor): long 키를 추출하는 함수를 기반으로 하는 Comparator를 생성합니다.

comparingDouble(ToDoubleFunction<? super T> keyExtractor): double 키를 추출하는 함수를 기반으로 하는 Comparator를 생성합니다.

사용 코드

Comparator<Person> comparator = Comparator
            .comparing(Person::getName)
            .thenComparingInt(Person::getAge);
-----
 Comparator<String> comparator = Comparator
            .nullsFirst(Comparator.naturalOrder())
            .thenComparing(Comparator.reverseOrder());

-----
Comparator<Employee> comparator = Comparator
            .comparing(Employee::getName)
            .thenComparingInt(Employee::getAge)
            .thenComparing(Employee::getEmail);
-----

참조 출처
https://teching.tistory.com/136

0개의 댓글