2

string と double を含むツリーマップがあるとします。マップから最初の 10 個のキーを取得する方法はありますか?

4

5 に答える 5

4

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());
}
于 2011-01-06T17:54:19.197 に答える
1

JDK にはありませんが、サードパーティのライブラリにはこれを行うメソッドがあります。

例えばグアバIterables.limitから

于 2011-01-06T17:53:14.673 に答える
1

aTreeMapは であるNavigableMapため、そのインターフェイスのメソッドを確認する必要があります。最初の を選択できるものは何もありませんがn、特定のキーよりも小さいキーを持つすべてのエントリを選択できます。

それ以外の場合は、反復Iterator後に停止するだけです。n

于 2011-01-06T17:54:41.890 に答える
0

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
}

欠点:マップ全体がリストにコピーされます。

于 2011-01-06T17:58:12.663 に答える
0

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++;
    }

お世話になりました皆様、誠にありがとうございました。ほんとうにありがとう。

于 2011-01-06T18:44:49.727 に答える