3

マップのキーや値を考慮せずに、ツリー マップから最後の n 個の値を取得したいだけです。しかし、私はこれを行う方法についてまったく手がかりがありません。以下は、マップから最初の 5 つのレコードを引き出すことができるサンプル コードです。マップから最後の n レコードを取得するように変更するにはどうすればよいですか?

Map startValues = new ArrayList<Map.Entry<String, Integer>>(5);
iterator = sortedMap.entrySet().iterator();
for (int i1 = 0; iterator.hasNext() && i1 < 5; i1++) {
    startValues.add(iterator.next());
}
4

3 に答える 3

4

sortedMapvariable に a のインスタンスが含まれている場合は、をTreeMap使用しますdescendingKeySet()。そこに含まれるキーの逆順を返します。

Map startValues = new ArrayList<Map.Entry<String, Integer>>(5);
iterator = sortedMap.descendingKeySet().iterator();
for (int i1 = 0; iterator.hasNext() && i1 < 5; i1++) {
   startValues.add(sortedMap.get(iterator.next()));
}

元のコードとは対照的に、これはエントリではなくキーを反復することに注意してください。私はそれをテストコンパイルしていないので、ジェネリックと型キャストに小さな問題があるかもしれませんが、主なアイデアが十分に明確であることを願っています.

于 2012-09-11T08:31:33.663 に答える
1

作成時にオブジェクトTreeMapによって維持される順序。Comparator指定されていない場合Comparatorは、自然な順序です。

逆ソートComparatorを実装し、このコンパレータを newに渡し、古いツリーマップのすべての要素を新しいツリーマップに追加する最も簡単なソリューションを作成します。そうすれば、最後の 5 つのレコードを取得するためにコード サンプルを再利用できます。TreeMap

于 2012-09-11T08:31:20.833 に答える