본문 바로가기

WEB개발/JAVA

Comparator

`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