때문에 Date구현 Comparable, 그것은이 compareTo처럼 방법을 String수행합니다.
따라서 사용자 정의 Comparator는 다음과 같이 보일 수 있습니다.
public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
}
이 compare()메소드는을 리턴해야 int하므로 boolean계획했던 것처럼 직접 리턴 할 수 없습니다 .
정렬 코드는 다음과 같이 작성됩니다.
Collections.sort(Database.arrayList, new CustomComparator());
비교기를 재사용 할 필요가없는 경우이 모든 것을 작성하는 약간 더 짧은 방법은 인라인 익명 클래스로 작성하는 것입니다.
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
이제 람다 식 을 사용하여 마지막 예제를 더 짧은 형식으로 작성할 수 있습니다 Comparator.
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
그리고 List가 sort(Comparator)당신이 더욱이를 단축 할 수 있도록 방법 :
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
이것은 키가 있는 클래스 를 생성하는 내장 메소드 가있는 일반적인 관용구입니다 .ComparatorComparable
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
이들은 모두 동등한 형태입니다.