sort ordenar java comparator treemap sortedmap

ordenar - order java map



Comparador de Java TreeMap (3)

El comparador debe ser solo para la clave, no para toda la entrada. Ordena las entradas en función de las claves.

Deberías cambiarlo por algo como sigue

SortedMap<String, Double> myMap = new TreeMap<String, Double>(new Comparator<String>() { public int compare(String o1, String o2) { return o1.compareTo(o2); } });

Actualizar

Puede hacer lo siguiente (cree una lista de entradas en el mapa y ordene la lista según el valor, pero tenga en cuenta que esto no va a ordenar el mapa en sí):

List<Map.Entry<String, Double>> entryList = new ArrayList<Map.Entry<String, Double>>(myMap.entrySet()); Collections.sort(entryList, new Comparator<Map.Entry<String, Double>>() { @Override public int compare(Entry<String, Double> o1, Entry<String, Double> o2) { return o1.getValue().compareTo(o2.getValue()); } });

Necesito un comparador para un TreeMap. ¿Debo escribir esto anónimamente en el constructor para mi TreeMap? ¿De qué otra manera podría escribir mi comparador? Actualmente, a Java no le gusta mi código (¿puedo hacer esto de forma anónima?):

SortedMap<String, Double> myMap = new TreeMap<String, Double>(new Comparator<Entry<String, Double>>() { public int compare(Entry<String, Double> o1, Entry<String, Double> o2) { return o1.getValue().compareTo(o2.getValue()); } });

  1. ¿Puedo hacer lo anónimo anteriormente?
  2. ¿De qué otra manera podría hacer esto?
  3. Quiero ordenar mi mapa por el valor no la clave

No se puede ordenar TreeMap en valores.

Una implementación NavigableMap basada en un árbol rojo-negro. El mapa se clasifica de acuerdo con el orden natural de sus claves, o por un Comparador proporcionado en el momento de la creación del mapa, dependiendo de qué constructor se use Comparator<? super K> Comparator<? super K> por lo que su comparador debe comparar en las teclas.

Para proporcionar la clasificación de los valores necesitará SortedSet . Utilizar

SortedSet<Map.Entry<String, Double>> sortedset = new TreeSet<Map.Entry<String, Double>>( new Comparator<Map.Entry<String, Double>>() { @Override public int compare(Map.Entry<String, Double> e1, Map.Entry<String, Double> e2) { return e1.getValue().compareTo(e2.getValue()); } }); sortedset.addAll(myMap.entrySet());

Para darle un ejemplo

SortedMap<String, Double> myMap = new TreeMap<String, Double>(); myMap.put("a", 10.0); myMap.put("b", 9.0); myMap.put("c", 11.0); myMap.put("d", 2.0); sortedset.addAll(myMap.entrySet()); System.out.println(sortedset);

Salida:

[d=2.0, b=9.0, a=10.0, c=11.0]


Puedes deslizar la tecla y el valor. Por ejemplo

String[] k = {"Elena", "Thomas", "Hamilton", "Suzie", "Phil"}; int[] v = {341, 273, 278, 329, 445}; TreeMap<Integer,String>a=new TreeMap(); for (int i = 0; i < k.length; i++) a.put(v[i],k[i]); System.out.println(a.firstEntry().getValue()+"/t"+a.firstEntry().getKey()); a.remove(a.firstEntry().getKey()); System.out.println(a.firstEntry().getValue()+"/t"+a.firstEntry().getKey());