Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > Recorrer un hashMap

Buenas amigos necesitaría saber si me pueden dar una mano para mostrar los datos que tengo en un hashMap, les muestro lo que tengo hasta el momento...

luego de que lleno el hashMap con elementos retorna y tengo el hashNE lleno.

HashMap<String, List<NetworkElement>> hashNE = manageDao.loadNE(neToProcess, dateToProcess);

de esta manera recorro el hasMap

System.out.println("Mostrando las claves:");
for (String key : hashNE.keySet()) {
System.out.println(key);
}

en este primer System.out me devuelve el nombre del elemento perfectamente

System.out.println("Mostrando los valores:");
for (List<NetworkElement> value : hashNE.values()) {
System.out.println(value);
}
en este segundo.out deberia mostrarme las values de mi array o algo distinto pero lo que obtengo es lo siguiente...

Mostrando las claves:
RNC --> bien
Mostrando los valores:
[com.web.ultimate.model.bean.NetworkElement@469d2e, com.web.ultimate.model.bean.NetworkElement@1f95b0d, ---> mal deberia mostrar valores

en realidad lo que quiero saber es como accedo al array en donde tengo nombres, numeros, y todo tipo de informacion que he ido guardando, espero haber sido explicito, espero alguna ayuda muchas gracias ...

octubre 30, 2016 | Registered Commentermatimarco

Hola, lo primero es decirte que lo que estas recorriendo son los keys por un lado, y los values por otro, si lo que quieres, es recorrer el hashmap y por cada clave te muestre el contenido, debes hacerlo todo en un mismo bucle. Algo así:


for (Map.Entry<String, List<NetworkElement>> entrada : map.entrySet()) {
System.out.println("La clave es: "+entrada.getkey());
System.out.println("Dentro hay objetos de tipo: " +entrada.getValue().getClass().getName());
//Es preferible recorrer la lista y imprimir cada elemento(O hacer operaciones a cada elemento), que imprimir toda la lista de sopeton como hacias arriba
for(NetworkElement elemento:entrada.getValue()){
System.out.println("Imprimiendo elemento: " + elemento.toString());
}

}

Ahora tu problema viene en que tienes que tener en cuenta que el Objeto NetworkElement, que no se si es tuyo o alguien te paso la clase, debe tener el método toString implementado, sino, de nuevo tendrás una salida tipo...

[com.web.ultimate.model.bean.NetworkElement@469d2e, com.web.ultimate.model.bean.NetworkElement@1f95b0d

Por eso te sale eso, porque no le has echo el método toString a la clase NetworkElement
cuando imprimes un objeto por pantalla, automáticamente java, busca el metodo toString en la clase cuyo objeto estas imprimiendo.

Para que hagas una prueba, ve a tu clase NetworkElement y agrega este metodo:


public String toString(){
return "Hola";
}

Si añades ese método a tu clase NetworkElement y vuelves a ejecutar tu código, te darás cuenta, que ahora lo que se imprime es la palabra Hola 2 veces, una por cada elemento de la lista.

Vuelve a repasar la clase Object y sus métodos, te servirá de ayuda. Un saludo

octubre 30, 2016 | Registered Commenterloderain

Gracias por responder, como siempre muy atento, mi clase network element es la siguiente:

package com.web.ultimate.model.bean;

import java.io.Serializable;

public class NetworkElement implements Serializable{
private static final long serialVersionUID = 1L;


private String id;
private String distName;
private String neType;
private String parameterNames;
private String parameterValues;


public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDistName() {
return distName;
}
public void setDistName(String distName) {
this.distName = distName;
}
public String getNeType() {
return neType;
}
public void setNeType(String neType) {
this.neType = neType;
}
public String getParameterNames() {
return parameterNames;
}
public void setParameterNames(String parameterNames) {
this.parameterNames = parameterNames;
}
public String getParameterValues() {
return parameterValues;
}
public void setParameterValues(String parameterValues) {
this.parameterValues = parameterValues;
}




}

de tu manera también me imprime lo mismo el código, tengo dentro del hasmap tengo lleno de elementos dentro de un array <e>, los veo pero no puedo acceder a ellos ..

octubre 31, 2016 | Unregistered CommenterMatias

Hola, creo que no entendiste bien la respuesta, por eso seré mas directo, para imprimir correctamente las variables tienes infinidad de opciones yo te pongo 2 posibilidades:

Posibilidad 1: Implementar método toString en la clase NetworkElement:

Añade a tu clase el método toString, como se muestra aquí:

package com.web.ultimate.model.bean;

import java.io.Serializable;

public class NetworkElement implements Serializable{
private static final long serialVersionUID = 1L;


private String id;
private String distName;
private String neType;
private String parameterNames;
private String parameterValues;


public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDistName() {
return distName;
}
public void setDistName(String distName) {
this.distName = distName;
}
public String getNeType() {
return neType;
}
public void setNeType(String neType) {
this.neType = neType;
}
public String getParameterNames() {
return parameterNames;
}
public void setParameterNames(String parameterNames) {
this.parameterNames = parameterNames;
}
public String getParameterValues() {
return parameterValues;
}
public void setParameterValues(String parameterValues) {
this.parameterValues = parameterValues;
}

public String toString(){
return "id:"+id+"\ndistName:"+distName+"\nneType:"+neType+"\nparameterNames:"+parameterNames+"\nparameterValues:"+parameterValues;

}
}

Posibilidad 2: En el bucle, ir llamando a los métodos get:


System.out.println("Mostrando los valores:");
for (List<NetworkElement> value : hashNE.values()) {
for(NetworkElement elemento: value){
System.out.println("Id:"+elemento.getId());
System.out.println("DistName:"+elemento.getDistName());
System.out.println("NeType:"+elemento.getNeType());
System.out.println("ParameterNames:"+elemento.getParameterNames());
System.out.println("ParameterValues:"+elemento.getgetParameterValues());
}
}

Estas son 2 de las posibles opciones que tienes para imprimir correctamente el contenido de las variables de la clase NetworkElement. Elige una y prueba, o prueba una, y después la otra, o las 2, tb las puedes tener... en fin 1.000.000 de maneras diferentes de dar solución a lo mismo, la que elijas es cosa tuya

Aviso: Este problema que estas teniendo, no es debido al hashMap, ni debido a List, esto es algo super básico de java. No puedes imprimir un Objeto que no tenga implementado el metodo toString, porque java no es adivino para saber de que forma tiene que imprimirte ese objeto... tu debes decirselo implementando el toString.

Te recomiendo, que repases los fundamentos básicos de java, porque si te pones a trastear con hashmap y estructuras sin ni siquiera saber imprimir un objeto... vas a avanzar con muchas deficiencias. En programación mas vale estudiar bien y echarle un buen tiempo a cada concepto, porque si no te iras dando cabezazos de este tipo cada 2 x 3.

Bueno un saludo

octubre 31, 2016 | Registered Commenterloderain

Hola loderain, agradezco mucho tu ayuda, en primer lugar tienes mucha razón en que tengo que repasar conceptos básico de java nuevamente, el tema es que estoy aprendiendo jquery, y ademas muchas cosas nuevas que me marearon, y revisando mis antiguos programas me di cuenta del método toString ,ahora veo que en el paso numero 2 sin invocar al método tostring también podía obtener por consola los datos. Me ha servido muchísimo tu ayuda, una vez mas te agradezco, lo peor de todo es que solo quería imprimir los datos por consola para chequear si estaba bien lo realizado hasta el momento, ahora tengo que insertar esos datos para sacarlos por excel, así que a renegar de nuevo ... Saludos ..

octubre 31, 2016 | Unregistered CommenterMatias