날짜 순으로 정렬하는 문제에서 이용해야할 때가 종종 있다.
우선 SimpleDateFormat 으로 Date형식으로 만드는 것이 첫 번째 단계이다.
그 후, compareTo 함수를 사용하거나 getTime()을 이용해 long값 변환 후 비교하는 두 가지 방법이 있다.
1) Long 값으로 변환 후 비교
다음 코드는 ArrayList에 들어있는 객체 Edge들을 날짜를 비교해서 정렬하는 코드이다.
여기서 Edge.getTime() 함수는 Date.getTime()이라고 생각하면 된다.
Date.getTime()을 하면 Long타입의 데이터를 반환하게 되는데, 이를 비교하여 날짜를 정렬하는 방식이다.
"yyyy-MM-dd HH:mm:ss"의 형식으로 된 Date 타입을 비교할 때 유용한 것으로 보인다.
Collections.sort(list, new Comparator<Edge>() {
@Override
public int compare(Edge o1, Edge o2) {
if(o1.getTime() - o2.getTime() > 0){
return 1;
} else if(o1.getTime() - o2.getTime() < 0){
return -1;
} else {
return 0;
}
}
});
2) compareTo 함수 이용
위의 코드를 compareTo 함수를 이용하여 변형해보았다. HH:mm:ss 의 시간까지 비교해주는지는 확인못해봤지만
보통 이 방법을 많이 쓰는 것 같다.
a.compareTo(b) 의 경우 a가 크다면 1을 반환하고 b가 크다면 -1, 같다면 0을 반환한다.
이 때, a, b의 타입은 Date이다.
Collections.sort(list, new Comparator<Edge>() {
@Override
public int compare(Edge o1, Edge o2) {
return o1.day.compareTo(o2.day);
}
});
'Programming > Java & JSP & Spring' 카테고리의 다른 글
[Java] 최대값과 최소값 구하기 (0) | 2017.11.02 |
---|---|
[Java] 문자열을 변환하기 전 정수형인지 확인하는 방법 (0) | 2017.11.02 |
[Java] 배열 생성과 초기화 (0) | 2017.10.17 |
[Java] 자주 쓰이는 형변환 (0) | 2017.10.15 |
[Spring Boot] JPA UPDATE (0) | 2017.08.17 |