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());
}
});
- ¿Puedo hacer lo anónimo anteriormente?
- ¿De qué otra manera podría hacer esto?
- 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());