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

Ordenar Map de mayor a menor

Estas en el tema de Ordenar Map de mayor a menor en el foro de Java en Foros del Web. Imagínense que tengo un Map<String,Integer> con los siguientes valores: ("Rojo",3) ("Azul",1) ("Verde",2) ("Amarillo",4) ("Negro",2) Estoy intentando hacer un método para ordenarlos de mayor a menor ...
  #1 (permalink)  
Antiguo 13/03/2012, 11:53
 
Fecha de Ingreso: noviembre-2010
Mensajes: 72
Antigüedad: 13 años, 5 meses
Puntos: 1
Ordenar Map de mayor a menor

Imagínense que tengo un Map<String,Integer> con los siguientes valores:
("Rojo",3)
("Azul",1)
("Verde",2)
("Amarillo",4)
("Negro",2)


Estoy intentando hacer un método para ordenarlos de mayor a menor pero no lo consigo, me gustaría que al ordenar el mapa quedase así:

("Amarillo",4)
("Rojo",3)
("Negro",2)
("Verde",2)
("Azul",1)


¿Alguien sabe cómo podría hacerlo?


Un saludo y muchas gracias de antemano.
  #2 (permalink)  
Antiguo 14/03/2012, 06:18
Avatar de afrika026  
Fecha de Ingreso: junio-2011
Mensajes: 85
Antigüedad: 12 años, 10 meses
Puntos: 19
Respuesta: Ordenar Map de mayor a menor

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));
}
  #3 (permalink)  
Antiguo 14/03/2012, 16:14
 
Fecha de Ingreso: noviembre-2010
Mensajes: 72
Antigüedad: 13 años, 5 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));
}

Muchas gracias por tu respuesta. Te doy un +1.

Saludos.
  #4 (permalink)  
Antiguo 17/03/2012, 02:51
 
Fecha de Ingreso: noviembre-2010
Mensajes: 72
Antigüedad: 13 años, 5 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.
  #5 (permalink)  
Antiguo 17/03/2012, 03:43
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Ordenar Map de mayor a menor

Cita:
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.
Lo que quieres es incompatible con un Map, no puedes usar un objeto pensado para buscar objetos por clave única pretendiendo que existan claves repetidas.

Lo que deberías hacer es crear un objeto que contenga todos los datos e implementar el compareTo o crear un Comparator, para ordedar la lista mediante Collections.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #6 (permalink)  
Antiguo 20/03/2012, 15:08
 
Fecha de Ingreso: noviembre-2010
Mensajes: 72
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Ordenar Map de mayor a menor

Cita:
Iniciado por Xerelo Ver Mensaje
Lo que quieres es incompatible con un Map, no puedes usar un objeto pensado para buscar objetos por clave única pretendiendo que existan claves repetidas.

Lo que deberías hacer es crear un objeto que contenga todos los datos e implementar el compareTo o crear un Comparator, para ordedar la lista mediante Collections.

Hola, muchas gracias por tu ayuda, aunque no lo entendí del todo bien, ¿podrías ponerme un ejemplo para poderlo comprender mejor?.

Un saludo.
  #7 (permalink)  
Antiguo 21/03/2012, 03:25
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Ordenar Map de mayor a menor

Estamos en Java, que es orientado a objetos, así que lo primero es crear los objetos que necesita la aplicación. Si vas a trabajar con coches, necesitarás una clase coches.


Código Javascript:
Ver original
  1. public Class Coche implements Comparable<Coche>{
  2.  
  3. private int precio;
  4. private String modelo;
  5.  
  6. ....
  7.  
  8.  
  9. public int compareTo(Coche otro){
  10.  
  11. if(this.getPrecio()>otro.getPrecio())
  12. return -1;
  13. else if(this.getPrecio()<otro.getPrecio()
  14. return 1;
  15. else
  16. return 0;
  17. }
  18.  
  19. }

Luego guardas los objetos Coche en un List y le aplicas http://docs.oracle.com/javase/6/docs...a.util.List%29
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #8 (permalink)  
Antiguo 21/03/2012, 12:05
 
Fecha de Ingreso: noviembre-2010
Mensajes: 72
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Ordenar Map de mayor a menor

Cita:
Iniciado por Xerelo Ver Mensaje
Estamos en Java, que es orientado a objetos, así que lo primero es crear los objetos que necesita la aplicación. Si vas a trabajar con coches, necesitarás una clase coches.


Código Javascript:
Ver original
  1. public Class Coche implements Comparable<Coche>{
  2.  
  3. private int precio;
  4. private String modelo;
  5.  
  6. ....
  7.  
  8.  
  9. public int compareTo(Coche otro){
  10.  
  11. if(this.getPrecio()>otro.getPrecio())
  12. return -1;
  13. else if(this.getPrecio()<otro.getPrecio()
  14. return 1;
  15. else
  16. return 0;
  17. }
  18.  
  19. }

Luego guardas los objetos Coche en un List y le aplicas http://docs.oracle.com/javase/6/docs...a.util.List%29

Ya conseguí arreglar el problema, para ello también usé este link: http://www.webtaller.com/construccio...istas-java.php


Muchas gracias por tu ayuda, en general agradecer a todos los que aquí me ayudasteis porque sin ustedes creo que no lo hubiera sido capaz de sacar.

Un saludo y muchas gracias a todos.

Etiquetas: map, mayor, menor, string
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 21:53.