`Comparator` 는 객체를 어떤 기준으로 정렬할지 정의하는 함수형 인터페이스(Functional Interface) 입니다.
1. compare
int compare(T o1, T o2);
| 반환값 | 의미 |
| 음수 | o1이 먼저 |
| 0 | 같다 |
| 양수 | o2가 먼저 |
compare 구현
Comparator<String> com1 = (p1, p2) -> {
if (p1 == null && p2 == null) {
return 0;
} else if (p1 == null) {
return -1;
} else if (p2 == null) {
return 1;
} else {
return p1.compareTo(p2);
}
};
String.compareTo()
는 사전적인 의미가 아니라, 각 문자의 Unicode(UTF-16) 코드값 순서로 비교
2. 그 외 메소드
| 메서드 | 설명 | 예시 |
| comparing() | 특정 필드 기준 정렬 | Comparator.comparing(Person::getName) |
| comparingInt() | int 필드 정렬 | Comparator.comparingInt(Person::getAge) |
| comparingLong() | long 필드 정렬 | Comparator.comparingLong(Order::getId) |
| comparingDouble() | double 필드 정렬 | Comparator.comparingDouble(Product::getPrice) |
| thenComparing() | 2차, 3차 정렬 기준 추가 | comparingInt(...).thenComparing(...) |
| reversed() | 역순 정렬 | comparingInt(...).reversed() |
| nullsFirst() | null을 앞에 배치 | Comparator.nullsFirst(...) |
| nullsLast() | null을 뒤에 배치 | Comparator.nullsLast(...) |
| naturalOrder() | 자연 순서(오름차순) | Comparator.naturalOrder() |
| reverseOrder() | 자연 순서의 역순 | Comparator.reverseOrder() |
3. Comparable vs Comparator
| 구분 | Comparable | Comparator |
| 비교 메서드 | compareTo(T o) | compare(T o1, T o2) |
| 비교 규칙 위치 | 객체 내부 | 객체 외부 |
| 비교 기준 개수 | 보통 1개 | 여러 개 가능 |
| 함수형 인터페이스 | ❌ (람다로 거의 사용 안 함) | ✅ |
| 정렬 | Collections.sort(list) | Collections.sort(list, comparator) |
'WEB개발 > JAVA' 카테고리의 다른 글
| Record (0) | 2026.08.25 |
|---|---|
| [NIO] Files, Path (0) | 2026.08.13 |
| Comparator, Collectors (0) | 2026.08.07 |
| LocalTime, LocalDate, LocalDateTime (0) | 2026.08.03 |
| 함수형 인터페이스 (0) | 2026.01.21 |