2009-08-23 18 views

risposta

176

Supponendo tipo TreeMap < String, Integer >:

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

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

(tipi di chiave e valore può essere qualsiasi clas s ovviamente)

+4

FYI, EntrySet è il modo preferito per scorrere qualsiasi Mappa poiché i EntrySet sono per specifica riflettenti e rappresentano sempre lo stato dei dati nella Mappa anche se la Mappa sottostante cambierà. – Esko

+4

Preferita da chi? – Zed

+0

L'aggiunta alla risposta di Zed, utilizzando entrySet darà all'utente la possibilità di eliminare una determinata voce durante l'iterazione. – 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()); 

o:

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

o:

// 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

Utilizzando Google Collections, assumendo K è il tuo tipo di chiave:

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

È possibile utilizzare filterEntries invece se è necessario il valore come bene.

+0

Questo non fa alcun ordinamento. – zyamys

5

solo far notare il modo generico per iterare su qualsiasi mappa:

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()); 
    } 
    } 
Problemi correlati