Iteratorオブジェクトを使用して反復することなく、TreeMapから上位n個のキー要素(TreeMapがソートされていると思うのでtopを使用)を抽出することは可能ですか?
反復を行うことはできますが、nullなどをチェックするのは面倒です。
なぜnullをチェックするのですか?
Googleコレクションライブラリを使用する場合は、Iterables.limitを使用できます。
編集:何らかの理由でGCLページにはが含まれていませんがlimit
、Guavaにあります(GCLを効果的に置き換えました)-まだIterables.limit
です。
.subMap(low,high).keySet()
またはを使用して、あるキーから別のキーまでのキーのサブセットを簡単に取得できます.headMap(high).keySet()
。
n番目の正しいハイキーを見つけることは、直接的なアプローチがなく、反復が唯一の確実な方法であるため、より困難です。
(このコードはテストされていません)
public <K,V> SortedMap<K,V> subMap(SortedMap<K,V> map, int n) {
Iterator<K> it = map.keySet().iterator();
for (int i = 0; i<n && it.hasNext(); i++) {
it.next();
}
if (it.hasNext()) {
return map.headMap(it.next());
} else {
return map
}
}
あなたが使用することができます:
[subMap メソッド][1]
public NavigableMap<K,V> subMap(K fromKey,boolean fromInclusive,K toKey,boolean toInclusive)
[1]: http://java.sun.com/javase/6/docs/api/java/util/TreeMap.html#subMap(K , boolean, K, boolean)