Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/03/2012, 02:51
batistap
 
Fecha de Ingreso: noviembre-2010
Mensajes: 72
Antigüedad: 13 años, 6 meses
Puntos: 1
Respuesta: Ordenar Map de mayor a menor

Cita:
Iniciado por afrika026 Ver Mensaje
Te conviene almacenar los valores en un TreeMap, ya que te permite ordenar los datos, te pongo un ejemplo:

//Codigo que te ordena en forma Ascendente

SortedMap map = new TreeMap();

// Agrega algunos elementos
map.put("2", "Dos");
map.put("1", "Uno");
map.put("5", "Cinco");
map.put("4", "Cuatro");
map.put("3", "Tres");

// Lee el TreeMap y te muestra los resultados en orden Ascendente
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
System.out.println("Clave : " + key + " Valor :" + map.get(key));
}

//Codigo que te ordena en forma Descendente como es tu caso

SortedMap map = new TreeMap(java.util.Collections.reverseOrder());

// Agrega algunos elementos
map.put("2", "Dos");
map.put("1", "Uno");
map.put("5", "Cinco");
map.put("4", "Cuatro");
map.put("3", "Tres");

// Lee el TreeMap y te muestra los resultados en orden Descendente
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
System.out.println("Clave : " + key + " Valor :" + map.get(key));
}

Hola el código es muy bueno, pero claramente el SortedMap tal como está definido al igual que el Map no permiten claves repetidas, para mí eso es un problema.

Por ejemplo, tenemos aquí el coche y su precio:
(2000, Seat Marbella)
(3000, Opel Astra)
(2000, Mercedes Benz)
(1000, Honda Civic)
(2500, Seat Leon)

- La ordenación de mayor a menor fijándonos en la clave sería:
(3000, Opel Astra)
(2500, Seat Leon)
(2000, Mercedes Benz)
(2000, Seat Marbella)
(1000, Honda Civic)

Pero con el SortedMap no mostraría los 5 valores clave-valor, de los 2 2000 que hay solo mostraría a uno y para la aplicación que estoy haciendo eso no me resolvería el problema ya que en caso de tener la misma clave solo mostraría un coche con el mismo precio. ¿Alguna forma de solucionarlo?.

Un saludo y muchas gracias.