我有一个Date / String TreeMap,我想遍历最后N个条目。
TreeMap<Date,String> map = new TreeMap<Date,String>();
map.put(new Date(2011,1,1), "32,1");
map.put(new Date(2011,3,1), "35");
map.put(new Date(2011,4,5), "38,9");
map.put(new Date(2011,8,2), "57!!");
然后我迷路了。我发现了这个:
NavigableSet<Date> dates = donnees.descendingKeySet();
然后我不知道怎么说:
for(key in dates and i ; i from 0 to N)
{ do something }
任何帮助?
答案 0 :(得分:4)
看起来你想要迭代descendingMap()
:
private static final int N = 3;
...
int i = 0;
for (Map.Entry entry : map.descendingMap().entrySet()) {
if (i++ < N) {
System.out.println(entry);
}
}
控制台:
Fri Sep 02 11:39:05 EDT 2011=57!! Thu May 05 11:39:05 EDT 2011=38,9 Fri Apr 01 11:39:05 EDT 2011=35
附录:以下是在默认语言环境中使用Calendar
的示例:
private static Date createDate(int year, int month, int day) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, day);
return calendar.getTime();
}
...
map.put(createDate(2011, 5, 3), "3-Jun-2011");
答案 1 :(得分:1)
int i=0;
for(Iterator<Date> it = dates.iterator(); it.hasNext() && i<3;) {
Date date = it.next();
doSomething();
i++
}
或(等效):
int i=0;
Iterator<Date> it = dates.iterator();
while(i<3 && it.hasNext()) {
Date date = it.next();
doSomething();
i++
}
答案 2 :(得分:1)
你关心树的状态吗?如果没有,那么你可以做pollLastEntry()。这将删除树上的最后一个条目并将其提供给您。做3次,你就完成了。或者你可以将树压平成一个arrayList,然后返回最后3个元素。
答案 3 :(得分:0)
听起来你只需要遍历前三个项目:
int i=0;
for(Date date: dates){
//Do something
if(i++ > 2){
break;
}
}
答案 4 :(得分:0)
你可以实现Comparator并将其传递给TreeMap,这样“最早的”日期就在TreeMap的头部。
答案 5 :(得分:-1)
TreeMap to Array并使用for循环读取数组,条件为i&lt; 3