Comparable 인터페이스의 유일한 메서드 compareTo
- 단순 동치성 비교에 더해 순서까지 비교 가능하며 제너릭함
- Comparable을 구현했다는 것은 그 클래스의 인스턴스들에는 자연적인 순서가 있음을 뜻함
객체 참조 필드가 하나뿐인 비교자
public final class CaseInsensitiveString implements Comparable<CaseInsensitiveString> {
public int compareTo(CaseInsensitiveString cis) {
return String.CASE_INSENSITIVE_ORDER.compare(s, cis.s);
}
}
기본 타입 필드가 여럿일 때의 비교자
public int compareTo(PhoneNumber pn) {
int result = Short.compare(areaCode, pn.areaCode); // 가장 중요한 필드
if (result == 0) {
result = Short.compare(prefix, pn.prefix); // 두 번째로 중요한 필드
if (result == 0) {
result = Short.compare(lineNum, pn.lineNum); // 세 번째로 중요한 필드
}
}
return result;
}
비교자 생성 메서드를 활용한 비교자
private static final Comparator<PhoneNumber> COMPARATOR =
comparingInt((PhoneNumber pn) -> pn.areaCode)
.thenComparingInt(pn -> pn.prefix)
.thenComparingInt(pn -> pn.lineNum);
public int compareTo(PhoneNumber pn) {
return COMPARATOR.compare(this, pn);
}
'Effective java' 카테고리의 다른 글
[ITEM16] public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 (0) | 2021.09.05 |
---|---|
[item15] 클래스와 멤버의 접근권한을 최소화하라 (0) | 2021.09.03 |
[ITEM 13] clone재정의는 주의해서 진행하라 (0) | 2021.08.29 |
[ITEM 12] toString을 항상 재정의하라 (0) | 2021.08.29 |
[ITEM10] equals는 일반 규약을 지켜 재정의하라 (0) | 2021.08.29 |