[Java] Comparator

민경·2024년 7월 7일

❓ Comparator란

두 객체를 비교하는 기준을 사용자가 정의할 수 있는 인터페이스

📝 사용법

[Oracle] Comparator

  • 선언
Comparator<T> c = new Comparator<>() {};
  • 정의
    • 중괄호 내에 compare 메서드를 정의
    • 비교 함수의 반환값은 다음과 같은 의미를 가짐
      • 양수 : 첫 번째 객체가 두 번째 객체보다 크다는 의미
      • 0 : 두 객체가 같다는 의미
      • 음수 : 첫 번째 객체가 두 번째 객체보다 작다는 의미
Comparator<T> c = new Comparator<>() {
	public int compare(T o1, T o2) {
    	return o1 - o2;
    }
};
  • 정의한 정렬의 역순
    Comparator에서 제공하는 함수 사용
c.reverse();

🧐 IF

문자열 배열을 두 번째 문자의 사전 순으로 정렬하고 싶다면?

import java.util.*;

class Main {
    public static void main(String[] args) {
        String[] words = {"apple", "banana", "cold", "error"};
        
        Comparator com = new Comparator<String>() {
            public int compare(String o1, String o2) {
                return o1.charAt(1) - o2.charAt(1);
            }
        };
        
        Arrays.sort(words, com);
        
        for(String word : words) {
            System.out.println(word);
        }
    }
}

실행 결과

banana
cold
apple
error

☕️ 람다와 메서드 레퍼런스

Java 8부터 지원하는 람다 표현식과 메서드 레퍼런스를 이용하면 더 간단하게 구현 가능

  • 람다 표현식
Comparator<String> com = (o1, o2) -> o1.charAt(1) - o2.charAt(1);
  • 메서드 레퍼런스
Comparator<Person> byName = Comparator.comparing(Person::getName);
profile
강해져야지

0개의 댓글