가능한 중복 :
TreeMap sort by value
Map that could be iterated in the order of values(날짜) 값을 기준으로 TreeMap을 정렬하는 방법은 무엇입니까?
나는 유형 <String, Date>
의 트리 맵을 가지고있다. 날짜순으로 정렬하고 싶습니다 (가장 최근의 것부터). 고유 한 것으로 보장 할 수는 없으므로 키로 사용할 수 없습니다. 이 일을 할 수있는 방법이 있습니까?
가능한 중복 :
TreeMap sort by value
Map that could be iterated in the order of values(날짜) 값을 기준으로 TreeMap을 정렬하는 방법은 무엇입니까?
나는 유형 <String, Date>
의 트리 맵을 가지고있다. 날짜순으로 정렬하고 싶습니다 (가장 최근의 것부터). 고유 한 것으로 보장 할 수는 없으므로 키로 사용할 수 없습니다. 이 일을 할 수있는 방법이 있습니까?
, 당신이 할 수있는 일은 새에 컬렉션의 내용을 복사하는 것입니다 그리고 종류는, 예를 들면 :
List<Map.EntrySet<String, Date>> copy = new ArrayList<Map.EntrySet<String, Date>>(treeMap.entrySet());
Collections.sort(copy, new CustomComparator());
class CustomComparator implements Comparator<Map.Entry<String,Date>> {
public int compareTo(Map.Entry<String,Date> e1, Map.Entry<String,Date> e2) {
// compare your dates
}
}
물론이 컬렉션은되지 않습니다 원래 하나와 동기화되었으므로 원본 TreeSet
이 수정 될 때마다 다시해야합니다. 당신이 정말로 원하는 경우
오늘 날짜를 기준으로 한 일종의 정렬이 있습니까? 출생일처럼? – Skynet
사실 당신은 트리 맵에 중복 키를 가질 수 있습니다 그것은
Map<Date, String> map = new TreeMap<Date, String>(new Comparator<Date>() {
@Override
public int compare(Date d1, Date d2) {
return d1.after(d2) ? 1 : -1;
}
});
Date d1 = new Date(-100000000000L);
Date d2 = new Date(100000000000L);
map.put(d2, "s1");
map.put(d1, "s2");
map.put(d1, "s3");
System.out.println(map);
출력
2 개 항목이 동일한 키를 가지고 있고, 당신이 원하는대로 출력이 날짜로 정렬하는 것으로{Mon Oct 31 16:13:20 EET 1966=s3, Mon Oct 31 16:13:20 EET 1966=s2, Sat Mar 03 11:46:40 EET 1973=s1}
정의에 의한'Map'은 하나의 키에 대해 두 개의 값을 가질 수 없습니다. 내가 뭘 놓치고 있니? –
테스트에 사용 된 비교기가 허용합니다. 모두 Comparator와 당신의 욕망에 달려있다. TreeMap은 필요하다면 2가 1보다 작다고 생각하게 만들 수있다. –
아, 당신의 콤퍼레이터는 0을 반환하지 않습니다. –
@ Nambari, 값이 고유하지 않은 경우 해당 질문에 대한 대답이 작동하지 않습니다. –
@Louis, 값이 고유하지 않은데 왜 작동하지 않아야합니까? – ignis
@ 루이스 와서 만 : 알겠습니다. 사실 나는 당신의 대답을 찾고 있었지만, 나는 똑같은 일을한다고 생각했다. 나는 그것을 제거하고있다. – kosa