string と double を含むツリーマップがあるとします。マップから最初の 10 個のキーを取得する方法はありますか?
5 に答える
treeMap.entrySet().iterator()
キーと値のペアが必要なtreeMap.keySet().iterator()
場合、またはキーだけを気にする場合は、 iterator を介してフェッチし、iterator.next()
10 回またはreturn と同じくらい呼び出しiterator.hasNext()
ますtrue
。
List<Map.Entry<String, Double>> firstTen = new ArrayList<Map.Entry<String, Double>>(10);
Iterator<String, Double> iterator = treeMap.entrySet().iterator();
for (int i = 0; iterator.hasNext() && i < 10; i++) {
firstTen.add(iterator.next());
}
JDK にはありませんが、サードパーティのライブラリにはこれを行うメソッドがあります。
例えばグアバIterables.limit
から
aTreeMap
は であるNavigableMap
ため、そのインターフェイスのメソッドを確認する必要があります。最初の を選択できるものは何もありませんがn
、特定のキーよりも小さいキーを持つすべてのエントリを選択できます。
それ以外の場合は、反復Iterator
後に停止するだけです。n
entrySet()
をリストにラップして、 subList()
:を作成します。
SortedMap<String,Double> treeMap = new TreeMap<String, Double>();
List<Entry<String, Double>> firstTen =
new ArrayList<Map.Entry<String,Double>>(treeMap.entrySet())
.subList(0, 10);
for(Entry<String, Double> entry : firstTen){
// do something with entries
}
欠点:マップ全体がリストにコピーされます。
dkarp と sean によって提供されたコード スニペットで動作しました。ただし、DJClayworth の提案でも機能しました。これが私がそれを解決した方法です:
c=sorted_map.keySet();
Iterator itr=c.iterator();
String s="";
while (i<iteratesize&&itr.hasNext()){
s=(String) itr.next();
System.out.println(s);
s="";
i++;
}
お世話になりました皆様、誠にありがとうございました。ほんとうにありがとう。