2012-02-21 25 views
11

Quiero revisar cada elemento de un diccionario en java. para aclarar lo que quiero hacer, este es el código C#Foreach loop en java para el Diccionario

Dictionary<string, Label> LableList = new Dictionary<string, Label>(); 
foreach (KeyValuePair<string, Label> z in LabelList); 

No sé cómo hacer esto es Java, por ejemplo Hice esto

for(Object z: dic) 

pero dice que no es iterable . Aconseje ......

Respuesta

31

Supongo que tiene una Map<String, Label> que es la estructura de diccionario integrada de Java. Java no permite iterar directamente sobre Map (es decir, no implementa Iterable) porque sería ambiguo lo que realmente está iterando.

Es solo una cuestión de elegir iterar a través de las claves, valores o entradas (ambas).

p. Ej.

Map<String, Label> map = new HashMap<String, Label>(); 
//... 

for (String key : map.keySet()) { 
} 

for (Label value : map.values()) { 
} 

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

Su código de C# parece ser el mismo que iterar sobre las entradas (el último ejemplo).

+0

Así es como lo defino: Diccionario dic = null; No sé nada sobre Map ... ¿Es algún tipo de diccionario? – Daniel

+3

@Daniel Leer el javadoc te diría 'NOTA: Esta clase es obsoleta. Las nuevas implementaciones deberían implementar la interfaz de Map, en lugar de extender esta clase. Por lo tanto, debería utilizar una de las nuevas clases de mapas. Probablemente desee un 'HashMap', que también implemente las nuevas funciones que necesita para que iterable funcione – Voo

+1

Sorprendente, hace tiempo que había olvidado que Hashtable tenía una superclase Dictionary. –

0

Su mejor opción es utilizar esto:

for (String key : LableList.keys()) { 
    Label value = LableList.get(key); 

    // do what you wish with key and value here 
} 

En Java sin embargo, una apuesta mejor es no utilizar diccionario como lo haría en .NET que utilizar una de las subclases de mapas, por ejemplo, HashMap. Puede iterar a través de uno de estos como este:

for (Entry<String, Label> e : myMap.entrySet()) { 
    // Do what you wish with e.getKey() and e.getValue() 
} 

También se le recomienda no usar Dictionary en el javadoc oficial.

+1

Diccionario.keys() devuelve una enumeración que no implementa Iterable y, por lo tanto, no se puede utilizar en el ciclo foreach. Tu código no se compilará – Philipp

+0

Dilo a mi código de trabajo :) –

+0

Así que mi compilador de Eclipse está roto (lo que muestra y error), o no estamos hablando de lo mismo. (No es que el Diccionario importe de ninguna manera) – Philipp

3

java.util.Map es el equvivalent Diccionario y a continuación es un ejemplo de cómo se puede iterar a través de cada entrada

for(Map.Entry<K, V> e : map.entrySet()) 
{ 
    System.out.println(e.getKey()+": "+e.getValue()); 
} 
0

yo estaba tratando de añadir el contenido de un HashMap (a) en otra HashMap (b).

me pareció sencilla para iterar a través de un HashMap de esta manera:

a.forEach((k, v) -> b.put(k, v)); 

Puede manipular mi ejemplo para hacer lo que quieras en el otro lado de la "->".

Tenga en cuenta que esta es una expresión Lambda, y que tendría que usar Java 1.8 (Java 8) o posterior para que esto funcione. :-)