1

日付値ペアのコレクションを並べ替えたい。私のキーは日付で、値は文字列です。そこで、TreeMap を選択しました。

今、

  1. 次のイテレータは、TreeMaps キーと同様にソートされます。いくつかのループを試しましたが、まだ疑問があります

    Iterator<Date> iter = policyMap.keySet().iterator();
    
  2. イテレータのインデックスをインクリメントせずに次のキーを取得する方法はありますか?

  3. policyMap.higherKey(cpDate))Java 6の前にこれと同等の方法はありますか.

最後に、私もフォローしようとした自分を恥じました。

TreeMap<Date, String> policySubMap = 
new TreeMap<Date, String>policyMap.tailMap(cpDate));
policySubMap.remove(policySubMap.firstKey());
System.out.println(" | amount > " + policySubMap.firstKey());

これは私の完全なコードです:

public void controller(){

TreeMap<Date, String> policyMap = new TreeMap<Date, String>();
Calendar cal = Calendar.getInstance();

policyMap.put(addDate(cal, 2).getTime(), "Amount is 10");
policyMap.put(addDate(cal, 10).getTime(), "Amount is 10");
policyMap.put(addDate(cal, -10).getTime(), "Amount is -10");
policyMap.put(addDate(cal, 11).getTime(), "Amount is 11");
policyMap.put(addDate(cal, -11).getTime(), "Amount is -11");
policyMap.put(addDate(cal, -12).getTime(), "Amount is -12");

Iterator<Date> iter = policyMap.keySet().iterator();

while (iter.hasNext()) {
    Date cpDate = iter.next();
    System.out.print("From "+cpDate + " to " + policyMap.get(cpDate));
//      if(iter.hasNext())System.out.println(" | amount > " + policyMap.higherKey(cpDate)); // This is not supporting in before java 6
        if(iter.hasNext()){
            TreeMap<Date, String> policySubMap = new TreeMap<Date, String>(policyMap.tailMap(cpDate));
            policySubMap.remove(policySubMap.firstKey());
            System.out.println(" | amount > " + policySubMap.firstKey());
        }

    else System.out.println("Checking date");

    }
}

public Calendar addDate(Calendar cal, int amount) {
    cal.add(Calendar.DATE, amount);
    return cal;
}
4

1 に答える 1

3
  1. はい

  2. いいえ。2 番目のイテレータを使用するか、mroe で前の値を効率的に保存できます。

  3. 使用できます

    Date nextKey = treeMap.tailMap(new Date(date.getTime()+1)).firstKey();
    
于 2012-06-11T12:31:49.693 に答える