Esta es una pregunta muy básica, yo no soy tan bueno con Java. Tengo un Mapa y quiero obtener una lista o algo de las claves en orden para que pueda iterar sobre ellas.¿Cómo puedo ordenar las claves de un mapa en Java?
Respuesta
Utilice TreeMap
, que es una implementación de la interfaz SortedMap
. Presenta sus claves en orden ordenado.
Map<String, Object> map = new TreeMap<String, Object>();
/* Add entries to the map in any order. */
...
/* Now, iterate over the map's contents, sorted by key. */
for (Map.Entry<String, ?> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Si está trabajando con otra aplicación de mapas que no se clasifica como desee, puede pasar a la constructor de TreeMap
para crear un nuevo mapa con llaves ordenadas.
void process(Map<String, Object> original) {
Map<String, Object> copy = new TreeMap<String, Object>(original);
/* Now use "copy", which will have keys in sorted order. */
...
}
A TreeMap
funciona con cualquier tipo de clave que implementa la interfaz Comparable
, poniéndolos en su orden "natural". Para las claves que no son Comparable
, o cuyo orden natural no es lo que necesita, puede implementar su propio Comparator
y especificarlo en el constructor.
Tiene varias opciones. Clasificado por orden de preferencia:
- Utilice un
SortedMap
:
SortedMap<whatever> myNewMap = new TreeMap<whatever>(myOldMap);
Esto es mucho más preferible si desea repetir más de una vez. Mantiene las claves ordenadas para que no tenga que ordenarlas antes de iterar. - No hay número 2.
- No hay n. ° 3, tampoco.
SortedSet<whatever> keys = new TreeSet<whatever>(myMap.keySet());
List<whatever> keys = new ArrayList<whatever>(myMap.keySet()); Collections.sort(keys);
Los dos últimos le conseguirá lo que quiere, pero sólo debe usarse si sólo desea repetir una vez y luego olvidarse de todo.
En el paso # 4, también puede crear un TreeSet (un conjunto ordenado) en lugar de una lista, lo que le evita hacer una llamada explícita a sort(). –
@David: Pensé en eso, pero por alguna razón olvidé que era posible iterar sobre un Set. Sin embargo, requiere clasificación cada vez. –
hmm me gusta el # 4. ¿Por qué requiere más clasificación que el # 1?Hubiera pensado que era igual de bueno –
Puede crear una colección ordenada al iterar, pero tiene más sentido tener un mapa ordenado en primer lugar. (Como ya se ha sugerido)
De todos modos, así es como lo hace.
Map<String, Object> map;
for(String key: new TreeSet<String>(map.keySet()) {
// accessed in sorted order.
}
- 1. ¿cómo puedo ordenar NSMutableDictionary con el valor de las claves?
- 2. mapa de Java con claves duplicadas
- 3. Ordenar mapa <String, Object> por claves con IgnoreCase?
- 4. ¿Cómo puedo ordenar un mapa STL por valor?
- 5. ¿Cómo puedo ordenar un mapa por su .segundo parámetro
- 6. ¿Cómo eliminar varias claves de un mapa?
- 7. Obtener una enumeración (para las claves) de un mapa (HashMap) en Java?
- 8. Redis: ¿Cómo puedo ordenar mi hash por claves?
- 9. ¿Cómo puedo ordenar enum alfabéticamente en Java?
- 10. ¿Cómo puedo tener un HashMap con claves únicas en java?
- 11. ¿Cómo puedo ordenar un conjunto en una lista en Java?
- 12. Dissoc varias claves descendientes de un mapa?
- 13. obteniendo todas las claves para un mapa como $ _POST
- 14. ¿Cómo puedo ordenar las fechas en Perl?
- 15. colecciones Java - conjunto de claves() vs entrySet() en el mapa
- 16. ¿Cómo ordenar la lista con claves duplicadas?
- 17. Cómo intercambiar claves y valores en un Mapa elegantemente
- 18. ¿El mapa sin ordenar es realmente desordenado?
- 19. Definir un mapa como constante en java
- 20. cómo ordenar las teclas HashMap
- 21. Obtener valores de claves dentro de un rango en Java
- 22. ¿Cómo ordenar perl hash en los valores y ordenar las claves de manera correspondiente (en dos matrices, tal vez)?
- 23. ¿Cómo puedo ordenar un NSDictionary?
- 24. ¿Cómo devolver una lista de claves desde un mapa hash?
- 25. Primavera - ¿Cómo establecer las claves de enumeración en un mapa con anotaciones
- 26. Mapa de claves múltiples en C++
- 27. Intercambiando claves y valores de un mapa en C++
- 28. ¿Cómo encontrar las claves de un hash?
- 29. ¿Puedo ordenar las pestañas en Eclipse alfabéticamente?
- 30. Ordenar un diccionario en su lugar con respecto a las claves
El código que estoy consumiendo me da un objeto Map, así que ¿cómo lo convierto en un TreeMap o uso un TreeMap para hacer la clasificación? – Bialecki
Puede crear TreeMap utilizando un constructor cuyo parámetro sea cualquier mapa. Además, felicidades Erickson (supongo, ya que estás a solo 5 repeticiones de 10k). –
Ding! Erickson sube de nivel. –