더북(TheBook)

3.8.3 Comparator 인터페이스의 메서드


Comparator 인터페이스에는 비교자를 만들어 내는 유용한 고차 함수가 정적 메서드로 많이 정의되어 있다.

comparing 메서드는 T 타입을 String처럼 비교 가능한 타입으로 매핑하는 ‘키 추출(key extractor)’ 함수를 받는다. 비교 대상 객체에 키 추출 함수를 적용한 후 반환받은 키를 비교한다. 예를 들어 Person 클래스에 getLastName 메서드가 있다고 하자. 다음 방법으로 Person 객체의 배열을 성(last name)으로 정렬할 수 있다.

Arrays.sort(people, Comparator.comparing(Person::getLastName));


비교 대상이 같으면 thenComparing 메서드로 다른 비교자를 연결해 추가로 비교할 수 있다. 예를 들어 성을 기준으로 Person의 배열을 정렬한 후 성이 같은 사람을 이름으로 정렬할 수 있다.

Arrays.sort(people, Comparator.comparing(Person::getLastName)

    .thenComparing(Person::getFirstName));


이 메서드의 변형이 몇 가지 있다. 그중 한 변형은 comparingthenComparing 메서드가 추출하는 키에 적용할 비교자를 지정할 수 있다. 예를 들어 다음은 이름의 길이 순으로 사람을 정렬한다.

Arrays.sort(people, Comparator.comparing(Person::getLastName,

    (s, t) -> s.length() - t.length()));

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.