객체의 여러 정렬 기준을 분리합니다.
Comparable은 타입의 자연 순서를, Comparator는 사용 지점의 별도 정렬 정책을 표현합니다. comparing과 thenComparing으로 여러 기준을 조합할 수 있습니다.
comparingInt(Student::getScore)는 점수 오름차순 비교기이고 reversed()가 이를 뒤집어 95점 지영이 맨 앞에 옵니다. 88점으로 같은 민수와 서준은 thenComparing(Student::getName)이 이름의 문자열 순서로 가르는데, 유니코드 순서상 민이 서보다 앞이라 민수가 먼저입니다. reversed()는 그때까지 이어진 비교기 전체를 뒤집으므로 thenComparing 뒤에 붙이면 이름 순서까지 거꾸로 됩니다.
비교 함수는 일관되고 추이적이어야 합니다. a-b 방식은 overflow가 가능하므로 Integer.compare나 comparingInt를 사용합니다.
정렬 기준을 도메인 이름으로 상수화하면 여러 화면과 서비스에서 같은 정책을 재사용할 수 있습니다.
Collections.sort는 원본 목록을 바꾸고 stream.sorted는 새 흐름을 만듭니다.
직접 바꿔보세요점수가 같을 때 이름 오름차순으로 정렬하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.