Comparator — 비교 함수 인터페이스
Comparator — 비교 함수 인터페이스
일부 객체 컬렉션에 전체 순서(total ordering)를 부과하는 비교 함수를 나타내는 함수형 인터페이스예요.
본문
시그니처
@FunctionalInterface
public interface Comparator<T>
타입 매개변수: T — 이 비교자가 비교할 수 있는 객체의 타입.
설명
비교자(comparator)는 일부 객체 컬렉션에 전체 순서를 부과하는 비교 함수예요. 비교자는 정렬 순서를 정밀하게 제어하기 위해 Collections.sort나 Arrays.sort 같은 정렬 메서드에 전달될 수 있어요. 비교자는 정렬된 set이나 정렬된 map 같은 특정 데이터 구조의 순서를 제어하거나, 자연 순서가 없는 객체 컬렉션에 순서를 제공하는 데도 사용될 수 있어요.
집합 S의 요소에 대해 비교자 c가 부과하는 순서는, S의 모든 e1, e2에 대해 c.compare(e1, e2) == 0이 e1.equals(e2)와 같은 불리언 값을 가질 때만 equals와 일치한다고 말해요.
equals와 일치하지 않는 순서를 부과할 수 있는 비교자를 정렬된 set(또는 map)을 정렬하는 데 사용할 때는 주의해야 해요. 예를 들어 명시적 비교자 c를 가진 정렬된 set이 S에서 뽑은 요소(또는 키)와 함께 사용될 때, c가 S에 부과하는 순서가 equals와 일치하지 않으면 그 set은 "이상하게" 동작해요. 특히 equals로 정의된 set(또는 map)의 일반 계약을 위반해요.
참고: 비교자는 정렬 가능한 데이터 구조(예: TreeSet, TreeMap)에서 순서 메서드로 사용될 수 있으므로 java.io.Serializable을 함께 구현하는 것이 일반적으로 좋아요. 데이터 구조가 성공적으로 직렬화되려면 제공된 비교자가 Serializable을 구현해야 해요.
다형성 알고리즘에 응용할 수 있도록, 이 인터페이스는 comparing, thenComparing, reversed, naturalOrder 같은 정적·기본 팩토리 메서드도 제공해요.
주요 메서드
compare(T o1, T o2)— 순서를 위해 두 인자를 비교해요. 첫 번째 인자가 두 번째보다 작으면 음의 정수, 같으면 0, 크면 양의 정수를 반환해요.reversed()— 이 비교자의 역순을 부과하는 비교자를 반환해요.thenComparing(Comparator<? super T> other)— 이 비교자가 두 요소를 같다고 판단할 때 사용할 두 번째 비교자를 가진 사전식 순서 비교자를 반환해요.naturalOrder()— 자연 순서로 비교하는 비교자를 반환해요.reverseOrder()— 자연 순서의 역순을 부과하는 비교자를 반환해요.comparing(Function<? super T,? extends U> keyExtractor)— 키 추출 함수를 적용한 뒤 그 키로 비교하는 비교자를 반환해요.