Powiel możliwe:
How do I iterate over each Entry in a Map?Jak iterować nad mapą drzewa?
Chcę iteracyjne nad TreeMap
, a dla wszystkich kluczy, które mają szczególną wartość, chcę im być dodane do nowej TreeMap
. Jak mogę to zrobić?
Powiel możliwe:
How do I iterate over each Entry in a Map?Jak iterować nad mapą drzewa?
Chcę iteracyjne nad TreeMap
, a dla wszystkich kluczy, które mają szczególną wartość, chcę im być dodane do nowej TreeMap
. Jak mogę to zrobić?
Zakładając TYP TreeMap < String, Integer >:
for(Map.Entry<String,Integer> entry : treeMap.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + " => " + value);
}
(klucz i wartość typy mogą być dowolne clas s oczywiście)
FYI, EntrySet jest preferowanym sposobem do iteracji w dowolnej Mapie, ponieważ EntrySets są zgodne ze specyfikacją i zawsze reprezentują stan danych na mapie, nawet jeśli mapa pod nimi się zmieni. – Esko
Preferowany przez kogo? – Zed
Dodanie do odpowiedzi Zeda, użycie parametru entrySet da użytkownikowi uprawnienia do usunięcia określonego wpisu podczas iteracji. – SamDJava
//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());
czyli
for (Map.Entry<K,V> entry : treeMap.entrySet()) {
V value = entry.getValue();
K key = entry.getKey();
}
czyli
// 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);
}
Korzystanie Google Collections, zakładając, że K jest twój typ klucza:
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
}});
Można użyć filterEntries
zamiast jeśli potrzebna wartość, jak również.
To nie powoduje żadnego sortowania. – zyamys
Wystarczy zwrócić uwagę na ogólny sposób iteracyjne nad dowolną mapę:
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());
}
}
@Kliknij:”... za„klucz, które mają szczególną wartość ... wszystko ". Czy chodzi ci o wszystkie klucze w danym zestawie, czy o wszystkie klucze spełniające dany predykat? –