cómo ordenar los valores del mapa por clave en Java?



Answers

Suponiendo que TreeMap no es bueno para usted (y suponiendo que no puede usar genéricos):

List sortedKeys=new ArrayList(yourMap.keySet());
Collections.sort(sortedKeys);
// Do what you need with sortedKeys.
Question

Tengo un mapa en Java que tiene cadenas para ambos.

Los datos son como los siguientes: <"question1", "1">, <"question9", "1">, <"question2", "4">, <"question5", "2">

Quiero ordenar el mapa en función de sus claves. Entonces, al final, tendré la question1, question2, question3 ... y así sucesivamente.

Eventualmente, estoy tratando de obtener dos cadenas de este Mapa. Primera cadena: preguntas (en orden 1 ..10) y segunda cadena: respuestas (en el mismo orden que la pregunta).

En este momento tengo lo siguiente:

Iterator it = paramMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
 questionAnswers += pairs.getKey()+",";
}

Esto me da las preguntas en una cadena, pero no están en orden ...




También podemos ordenar la clave utilizando el método Arrays.sort.

Map<String, String> map = new HashMap<String, String>();
Object[] objArr = new Object[map.size()];
for (int i = 0; i < map.size(); i++) {
objArr[i] = map.get(i);
}
Arrays.sort(objArr);
for (Object str : objArr) {
System.out.println(str);
}






Este código puede ordenar un mapa de clave-valor en ambos órdenes, es decir, ascendente y descendente.

<K, V extends Comparable<V>> Map<K, V> sortByValues
     (final Map<K, V> map, int ascending)
{
     Comparator<K> valueComparator =  new Comparator<K>() {         
        private int ascending;
        public int compare(K k1, K k2) {
            int compare = map.get(k2).compareTo(map.get(k1));
            if (compare == 0) return 1;
            else return ascending*compare;
        }
        public Comparator<K> setParam(int ascending)
        {
            this.ascending = ascending;
            return this;
        }
    }.setParam(ascending);

    Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
    sortedByValues.putAll(map);
    return sortedByValues;
}

Como ejemplo:

Map<Integer,Double> recommWarrVals = new HashMap<Integer,Double>();
recommWarrVals = sortByValues(recommWarrVals, 1);  // Ascending order
recommWarrVals = sortByValues(recommWarrVals,-1);  // Descending order



En Java 8 también puede usar .stream (). Sorted ():

myMap.keySet().stream().sorted().forEach(key -> {
        String value = myMap.get(key);

        System.out.println("key: " + key);
        System.out.println("value: " + value);
    }
);



Solo usa TreeMap

new TreeMap<String, String>(unsortMap);

Tenga en cuenta que TreeMap se clasifica de acuerdo con el orden natural de sus 'claves'




Related