1

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 }

助けはありますか?

4

6 に答える 6

5

次のことを繰り返したいようですdescendingMap()

private static final int N = 3;
...
int i = 0;
for (Map.Entry entry : map.descendingMap().entrySet()) {
    if (i++ < N) {
        System.out.println(entry);
    }
}

コンソール:

金 9 月 02 日 11:39:05 EDT 2011=57!!
2011 年 5 月 5 日木曜日 11:39:05 EDT=38,9
2011 年 4 月 1 日金曜日 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");
于 2011-08-03T15:43:20.440 に答える
2
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++
}
于 2011-08-03T15:14:37.877 に答える
1

木の状態を気にしますか?そうでない場合は、pollLastEntry()を実行できます。これにより、ツリーから最後のエントリが削除され、それが提供されます。3回やれば完成。または、ツリーを arrayList にフラット化し、最後の 3 つの要素だけを返すこともできます。

于 2011-08-03T15:15:49.247 に答える
0

最初の 3 つの項目をループするだけでよいようです。

    int i=0;
    for(Date date: dates){

        //Do something

        if(i++ > 2){
            break;
        }
    }
于 2011-08-03T15:18:55.083 に答える
0
  • TreeMap は NavigableMap を実装します。
  • NavigableMap.descendingMap()。
  • 降順 Map.entrySet().iterator() // 最初の 3 つのエントリはもちろん「最後の 3 つ」です。

Comparator を実装して TreeMap に渡すだけで、「最も古い」日付が TreeMap の先頭に表示されます。

于 2011-08-04T00:51:18.813 に答える
-1

TreeMap を Array に変換し、条件 i < 3 の for ループで配列を読み取ります

于 2011-08-03T15:14:49.247 に答える