Java에서 사용자 정의 정렬을 해봅니다.
Comparator를 이용해 정렬 기준이 2개인 객체를 정렬해봅니다.
정렬 하려는 대상
age와 money를 가지고 있는 Person
1 | |
sort를 쓰기전에 정렬의 기준을 정해주어야 한다.
comparator compare 메소드를 구현하여 정렬기준을 정해줍니다.
- 앞으로 가고 싶다면
-1 - 뒤로 가고 싶다면
1 -
같다면
0을 반환한다. c++의 경우 선두로 간다면 true, 반대의 false 을 리턴 했던것과는 반대의 상황이다.- 그리고
0도 추가되어있다.
1 | |
Comparator를 이용해 사용자 정의 정렬을 해보자.
형이면 뒤로 가는 정렬을 해보자. (오름차순)
- 돈 많으면 형이다. 돈이 같다면 나이로 형을 정한다.
1 | |
- 21살은 나이가 더 어리지만 22살 100만원보다 돈이 더많아 형이된다.
- 21살 23살은 같은 금액을 보유하고 있으므로, 나이를 따지게 되어 23살이 형이된다.
1 | |
1 | |
List의 경우, 객체.sort로 바꿀수 있다.
자바8 이상인 경우 람다식도 사용 가능하다.
1 | |
int 비교시 삼항 연산자를 제거할 수 있다.
삼항연산자를
Integer.compare로 치환할 수 있다.
- 기존의
o1.getAge() < o2.getAge() ? -1 : o1.getAge() > o2.getAge() ? 1 : 0;를 Integer.compare(o1.getAge(), o2.getAge())와 같이 바꿀수 있다.
1 | |
Comparator인터페이스 외에도Compable혹은 정적 메소드를 이용한 방법들이 존재한다.- 다른 글에서 추가적으로 정리하도록 한다.
Reference
- https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html