Tengo un HashMap
:
private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
Ahora me gustaría revisar todos los valores e imprimirlos.
Yo escribí esto:
for (TypeValue name : this.example.keySet()) {
System.out.println(name);
}
No parece funcionar.
¿Cuál es el problema?
EDITAR: Otra pregunta: ¿esta colección está basada en cero? Quiero decir, si tiene 1 clave y valor, ¿el tamaño será 0 o 1?
java
collections
Usuario desconocido
fuente
fuente
Map
'ssize()
método : ' Devuelve el número de asignaciones de valores clave en este mapa Si el mapa contiene másInteger.MAX_VALUE
elementos, vuelveInteger.MAX_VALUE
.'Respuestas:
keySet () solo devuelve un conjunto de claves de su hashmap, debe iterar este conjunto de claves y obtener el valor del hashmap utilizando estas claves.
En su ejemplo, el tipo de clave del hashmap es
TypeKey
, pero especificóTypeValue
en su bucle for genérico, por lo que no se puede compilar. Debes cambiarlo a:Actualización para Java8:
Si no necesita imprimir el valor de la clave y solo necesita el valor del hashmap, puede usar las sugerencias de otros.
La colección devuelta de
keySet()
es un conjunto . No puede obtener el valor de un conjunto utilizando un índice, por lo que no se trata de si está basado en cero o en uno. Si su hashmap tiene una clave, el keySet () devuelto tendrá una entrada adentro, y su tamaño será 1.fuente
for (Map.Entry<String, String> entry : map.entrySet()) { ... }
example.forEach((key, value) -> System.out.println("key + " | " + value));
Una forma sencilla de ver los pares de valores clave:
Tanto el método 1 como el método 2 generan esto:
fuente
System.out.println(map);
salida:{b=2, a=1}
System.out.println(map.toString());
.toString
cuando sea posible.Suponiendo que tiene un
Map<KeyType, ValueType>
, puede imprimirlo así:fuente
Para imprimir tanto la clave como el valor, use lo siguiente:
fuente
Tienes varias opciones
map.values()
, que obtiene los valores, no las clavesmap.entrySet()
que tiene amboskeySet()
y para cada llamada clavemap.get(key)
fuente
Desea el conjunto de valores, no el conjunto de claves:
El código que proporcione ni siquiera se compilará, lo que puede valer la pena mencionar en futuras preguntas: ¡"parece que no funciona" es un poco vago!
fuente
Vale la pena mencionar el enfoque Java 8, el uso
BiConsumer
y las funciones lambda:Suponiendo que ha anulado el
toString
método de los dos tipos si es necesario.fuente
Para mí, esta simple línea funcionó bien:
fuente
Una simple declaración de impresión con el nombre de la variable que contiene la referencia del Hash Map haría:
Esto funciona porque el
toString()
método ya está anulado en elAbstractMap class
que se extiende con laHashMap Class
información adicional de la documentaciónfuente
Nuevo
forEach
estilo de características de Java 8fuente
Lo hice usando el mapa de cadena (si está trabajando con el mapa de cadena).
fuente
Usar las funciones de java 8
fuente
Útil para imprimir rápidamente entradas en un HashMap
fuente
Si el mapa contiene una colección como valor, las otras respuestas requieren un esfuerzo adicional para convertirlas como cadenas, como
Arrays.deepToString(value.toArray())
(si es un mapa de valores de lista), etc.Enfrenté estos problemas con bastante frecuencia y encontré la función genérica para imprimir todos los objetos usando
ObjectMappers
. Esto es bastante útil en todos los lugares, especialmente durante la experimentación, y le recomendaría que elija de esta manera.fuente
Puedes usar la
Entry
clase para leerHashMap
fácilmente.fuente