Collections#sort
단계를 건너 뛸 수 있습니다 : TreeSet
중복 항목을 제거하고 항목을 정렬합니다. 그래서 기본적으로는 한 줄 작업입니다 : 날짜가 개체의 필드 인 경우
Set<Date> sortedWithoutDupes = new TreeSet<Date> (yourList);
, 다음 중 하나를 수행 할 수 있습니다 :
- 는 개체가 Comparable를 구현하고 그 날짜를 기준으로 개체를 비교해야
- 또는 두 경우 모두 일
하여 객체를 정렬합니다 TreeSet의 생성자에 인수와 같은 Comparator<YourObject>
을 통과, 당신은 사전 정렬 할 필요가 없습니다 요 ur 목록.
중요 참고 :
TreeSet의 키를 비교하는 compareTo
를 사용합니다. 따라서 두 키의 날짜는 같지만 이름이 다른 경우 compare 또는 compareTo 메서드가 0이 아닌 값을 반환하도록해야합니다. 그렇지 않으면 2 개의 개체가 동일하게 간주되어 하나만 삽입됩니다.
편집
(당신이 널 (null)을 처리해야 + 테스트하지) 코드는 다음과 같을 수 있습니다 :
Comparator<Metadata> comparator = new Comparator<Metadata>() {
@Override
public int compare(Metadata o1, Metadata o2) {
if (o1.sourceDate.equals(o2.sourceDate)) {
return o1.name.compareTo(o2.name);
} else {
return o1.sourceDate.compareTo(o2.sourceDate);
}
}
};
Set<Metadata> sortedWithoutDupes = new TreeSet<Metadata> (comparator);
sortedWithoutDupes.addAll(yourList);
하지만 날짜가 내 개체의 필드 인 경우 어떻게해야합니까? 그런 다음 날짜를 오름차순으로 주문할 수 있습니까? – Phoenix
@Phoenix 약간 다르지만 여전히 작동합니다. 제 편집을 참조하십시오. – assylias