Foros del Web » Programación para mayores de 30 ;) » Java »

Ordenar HashMap por valor

Estas en el tema de Ordenar HashMap por valor en el foro de Java en Foros del Web. Hola estoy intentando ordenar un Hashmap por valores, he encontrado un ejemplo por Internet pero me da un error de Casting. Me da error en ...
  #1 (permalink)  
Antiguo 17/10/2012, 02:17
 
Fecha de Ingreso: marzo-2009
Mensajes: 221
Antigüedad: 15 años, 1 mes
Puntos: 0
Ordenar HashMap por valor

Hola estoy intentando ordenar un Hashmap por valores, he encontrado un ejemplo por Internet pero me da un error de Casting.
Me da error en la línia:
TreeSet conjuntoOrdenado = new TreeSet(misMapValues);

El error es:
java.lang.RuntimeException: java.lang.ClassCastException


Código:
		HashMap vl_concepto = new HashMap();
			HashMap vl_conceptoAnadir = new HashMap();
			
			vl_concepto = (HashMap)vl_listaConceptos.get(index);
			
			vl_conceptoAnadir.put("cconcept", vl_concepto.get("mconpre_shcconcept"));
			vl_conceptoAnadir.put("dconcept", vl_concepto.get("mconpre_stdconcata"));
			vl_listaConceptosAnadir.add(vl_conceptoAnadir);

	HashMap mapResultado = new LinkedHashMap();
			
			List misMapKeys = new ArrayList(vl_conceptoAnadir.keySet());
			List misMapValues = new ArrayList(vl_conceptoAnadir.values());
			TreeSet conjuntoOrdenado = new TreeSet(misMapValues);
			
			Object[] arrayOrdenado = conjuntoOrdenado.toArray();
				
			int size = arrayOrdenado.length;
			
			for (int i=0; i<size; i++) 
			{
			mapResultado.put(misMapKeys.get(misMapValues.indexOf(arrayOrdenado[i])),arrayOrdenado[i]);
			}

			Iterator it1 = (Iterator) mapResultado.values().iterator();
			while (((java.util.Iterator) it1).hasNext()) {
			System.out.println((String)((java.util.Iterator) it1).next());
			}
Estoy probando pero no consigo arreglarlo, haber si alguien me echa un cable
Gracias
  #2 (permalink)  
Antiguo 19/10/2012, 12:39
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 12 años, 8 meses
Puntos: 29
Respuesta: Ordenar HashMap por valor

Para ordenar un map por su valor te recomiendo hacer esto:

1) Creas el Map normal (HashMap<...>)
2) Creas un Comparator que contenga el criterio para ordenar tu map anterior.
3) Creas un TreeMap con tu comparador donde ordenaras el map anterior:

Map miTreeMap<Tipo> = new TreeMap<Tipo>(miComparador)

Cuando tengas tu map normal, rellenas el TreeMap con los elementos del map. Por ejemplo

miTreeMap<Tipo>.putAll(miHashMap<Tipo>);

Ya tienes tu map ordenado por los valores.

Etiquetas: hashmap
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:45.