Ordenar un Map de mayor a menor

Estoy intentando hacer un método que me ordene de mayor a menor los valores de un Map<string, integer> en función de sus valores que son de tipo Integer pero no lo consigo. Imagínese 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)

¿Cómo podría hacerlo?

4

4 Respuestas

37.300 pts. 3 años de experiencia como Ingeniero de Sistemas, I...

He creado un link donde puedes ver el código y ejecutarlo:

http://ideone.com/A8fKp

No olvides finalizar la pregunta.

450 pts.
 public static void main(String[] args) {
 System.out.println("Unsort Map......");
 Map<string,integer> unsortMap = new HashMap<string,integer>();
 unsortMap.put("Rojo",3);
 unsortMap.put("Azul",1);
 unsortMap.put("Verde",2);
 unsortMap.put("Amarillo",4);
 unsortMap.put("Negro",2);
 for (Map.Entry entry : unsortMap.entrySet()) {
 System.out.println("Key : " + entry.getKey() 
 + " Value : " + entry.getValue());
 }
 System.out.println("Sorted Asc Map......");
 Map<string,integer> sortedAscMap = sortByAsc(unsortMap);
 for (Map.Entry entry : sortedAscMap.entrySet()) {
 System.out.println("Key : " + entry.getKey() 
 + " Value : " + entry.getValue());
 }
 System.out.println("Sorted Desc Map......");
 Map<string,integer> sortedDescMap = sortByDesc(unsortMap);
 for (Map.Entry entry : sortedDescMap.entrySet()) {
 System.out.println("Key : " + entry.getKey() 
 + " Value : " + entry.getValue());
 }
 }
 private static Map sortByAsc(Map unsortMap) {
 List list = new LinkedList(unsortMap.entrySet());
 //Para ordenar ascendentemente
 Collections.sort(list, new Comparator() {
 public int compare(Object o1, Object o2) {
 return ((Comparable) ((Map.Entry) (o1)).getValue())
 .compareTo(((Map.Entry) (o2)).getValue());
 }
 });
 //put sorted list into map again
 Map<string, integer=""> sortedMap = new LinkedHashMap<string, integer="">();
 for (Iterator it = list.iterator(); it.hasNext();) {
 Map.Entry<string, integer=""> entry = (Map.Entry<string, integer="">)it.next();
 sortedMap.put(entry.getKey(), entry.getValue());
 }
 return sortedMap;
 } 
 private static Map sortByDesc(Map unsortMap) {
 List list = new LinkedList(unsortMap.entrySet());
 //Para ordenar descendentemente
 Collections.sort(list, new Comparator() {
 public int compare(Object o1, Object o2) {
 return ((Comparable) ((Map.Entry) (o2)).getValue())
 .compareTo(((Map.Entry) (o1)).getValue());
 }
 });
 //put sorted list into map again
 Map<string, integer=""> sortedMap = new LinkedHashMap<string, integer="">();
 for (Iterator it = list.iterator(); it.hasNext();) {
 Map.Entry<string, integer=""> entry = (Map.Entry<string, integer="">)it.next();
 sortedMap.put(entry.getKey(), entry.getValue());
 }
 return sortedMap;
 } 

</string,></string,></string,></string,></string,></string,></string,></string,></string,integer></string,integer></string,integer></string,integer>
7.075 pts.

Disculpa no había visto tu pregunta y la verdad nunca e tratado de hacer eso pero podrías intentar esto

http://www.mkyong.com/java/how-to-sort-a-map-in-java/

0 pts.

To Sort a Map from highest to lowest you can refer below resource with some examples,

http://www.flowerbrackets.com/sort-hashmap-by-value/ 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas