지난번 Collections 클래스에 이어서
이번글에서는 Comparator에 대해서
알아보겠습니다.
사실 Comparator는 Collections클래스와
아주 연관이 깊은 인터페이스입니다.
Comparator
이해를 위해 간단한 예시를 들어보겠습니다.
만약에 숫자가 아닌 String을 비교한다고
가정해 보겠습니다.
Brown, Tomas
Swift, Taylor
Brown, Chris
Lee, Bruce
위 명단이 있다고 생각을 해봤을 때
나머지 사람들을 abc순으로 나열하는데
문제가 없지만 Tomas Brown과 Chris Brown은
성이 Brown으로 같기 때문에
성으로 나열할 때 JAVA코드에서 어떤 사람을
먼저 나타내야 할지 모르는 상황이 생깁니다.
이를 해결하기 위해 Comparator를 사용해서
비교하는 순서를 지정해 주는 역할을 합니다.
아래 코드를 한번 살펴보겠습니다.
import java.util.Comparator;
class Member{
String firstName, lastName;
int entryNum;
Member(String firstName, String lastName, int entryNum){
this.firstName = firstName;
this.lastName = lastName;
this.entryNum = entryNum;
}
@Override
public String toString(){
return this.lastName + ", " + this.firstName + ", entryNum: " + this.entryNum;
}
String getLastName(){
return this.lastName;
}
String getFirstName(){
return this.firstName;
}
static final Comparator<Member> comparator =
Comparator.comparing(Member::getLastName).thenComparing(Member::getFirstName);
}
우선 Comparator를 사용하기 위해서는
비교할 값을 return 해주는 메서드들을
클래스 내에 만들어야 합니다.
그 후에 static final로 Comparator를 선언하고
<> 안에는 비교대상인 클래스명을 적어줍니다.
먼저 비교할 것을 comparing()에 그리고
나중에 비교할 것을 thenComparing()에
작성하면 사용할 준비는 모두 끝이 납니다.
Member m0 = new Member("Tomas", "Brown", 1);
Member m1 = new Member("Taylor", "Swift", 13);
Member m2 = new Member("Chris", "Brown", 73);
Member m3 = new Member("Bruce", "Lee", 7);
Member[] members = {m0, m1, m2, m3};
ArrayList<Member> arrayList = new ArrayList<>(Arrays.asList(members));
Collections.sort(arrayList, Member.comparator);
for (Member m : arrayList){
System.out.println(" - " + m);
}
위 코드처럼 Comparator는 sort와 함께
사용합니다.
위 코드를 실행시켜 보면 아래와 같이
설정한 대로 정렬이 되는 모습을 확인할 수
있습니다.
이때 기본적으로 오름차순으로 정렬을 해주지만
내림차순으로 정렬하고 싶다면
comparing() 또는 thanComparing() 뒤에
comparing().reversed()와 같이
reversed()를 사용해 줍니다.
그럼 지금까지 Comparator에 대해서 알아보았습니다.
Collections와 Comparator를 적절히 사용한다면
다양한 데이터 타입이 모여있는 배열에서도
원하는 대로 정렬하는 것이 가능합니다.
Comparator를 마지막으로 자바 기초는
여기서 마무리하도록 하겠습니다!
'자바(JAVA) 기초 함께 알아보자' 카테고리의 다른 글
자바(JAVA) 기초 함께 알아보자(27) - Collections 클래스 (2) | 2025.02.13 |
---|---|
자바(JAVA) 기초 함께 알아보자(26) - 추상 클래스/추상 메소드 (abstract) (0) | 2025.02.11 |
자바(JAVA) 기초 함께 알아보자(25) - 다중 상속 / 인터페이스(Interface) (0) | 2025.02.09 |
자바(JAVA) 기초 함께 알아보자(24) - 다형성(Polymorphism) (0) | 2025.01.23 |
자바(JAVA) 기초 함께 알아보자(23) - 함수 오버로딩(Method Overloading) (2) | 2025.01.16 |