2009-08-23 12 views
101

可能性の重複:
How do I iterate over each Entry in a Map?TreeMapを反復処理する方法は?

私はTreeMapを反復処理したい、と特定の値を持つすべてのキーのために、私は彼らが新しいTreeMapに追加することにしたいです。これどうやってするの?

+1

@Click:」特定の値を持っている...すべてのための「キーの...」。指定されたSetのすべてのキー、または指定された述語を満たすすべてのキーを意味しますか? –

答えて

176

型ツリーマップを<文字列、整数>と仮定:

for(Map.Entry<String,Integer> entry : treeMap.entrySet()) { 
    String key = entry.getKey(); 
    Integer value = entry.getValue(); 

    System.out.println(key + " => " + value); 
} 

を(キーと値のタイプは、任意のCLASとすることができますGoogle Collectionsを使用して、もちろんS)

+4

EntrySetは仕様を反映しており、下のマップが変更された場合でもマップ内のデータの状態を常に表しているため、EntrySetは任意のMapを反復するのに好ましい方法です。 – Esko

+4

誰が優先しますか? – Zed

+0

Zedの答えに加えて、entrySetを使用すると、反復中に特定のエントリを削除する権限がユーザに与えられます。 – SamDJava

24
//create TreeMap instance 
    TreeMap treeMap = new TreeMap(); 

    //add key value pairs to TreeMap 
    treeMap.put("1","One"); 
    treeMap.put("2","Two"); 
    treeMap.put("3","Three"); 

    /* 
     get Collection of values contained in TreeMap using 
     Collection values()   
    */ 
    Collection c = treeMap.values(); 

    //obtain an Iterator for Collection 
    Iterator itr = c.iterator(); 

    //iterate through TreeMap values iterator 
    while(itr.hasNext()) 
     System.out.println(itr.next()); 

または:

for (Map.Entry<K,V> entry : treeMap.entrySet()) { 
     V value = entry.getValue(); 
     K key = entry.getKey(); 
    } 

または:

// Use iterator to display the keys and associated values 
    System.out.println("Map Values Before: "); 
    Set keys = map.keySet(); 
    for (Iterator i = keys.iterator(); i.hasNext();) { 
    Integer key = (Integer) i.next(); 
    String value = (String) map.get(key); 
    System.out.println(key + " = " + value); 
    } 
0

、Kはあなたのキータイプであると仮定すると:

Maps.filterKeys(treeMap, new Predicate<K>() { 
    @Override 
    public boolean apply(K key) { 
    return false; //return true here if you need the entry to be in your new map 
    }}); 

あなたにも値が必要な場合は、代わりにfilterEntriesを使用することができます。

+0

これはソートを行いません。 – zyamys

5

ただのマップを反復処理する一般的な方法を指摘する:

private <K, V> void iterateOverMap(Map<K, V> map) { 
    for (Map.Entry<K, V> entry : map.entrySet()) { 
     System.out.println("key ->" + entry.getKey() + ", value->" + entry.getValue()); 
    } 
    } 
関連する問題