java - fecha - No se puede ordenar la lista por orden ascendente
ordenar arraylist por date java (5)
Map<String, String> map ;
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
/////OnCreate.............
function1(){
map = new TreeMap<String, String>();
map.put("id", "id");
map.put("amont", "amount");
list.add(map);
System.out.println(list);
}
valores de entrada para id = 1,3,5,57,80
valores de entrada para cantidad = 100,500,200,10,10000
No se puede ordenar la lista por orden ascendente de cantidad. Todavía se muestra en el orden en que se insertó.
¿Cómo puedo solucionar esto? Agradezco cualquier ayuda. Gracias por adelantado.
Resultado previsto: orden ascendente de la cantidad:
amt=10 id=4
amt=100 id=1
amt=200 id=3
amt=500 id=2
amt=10000 id=5
Asumiendo que esta es su entrada
Map<String, String> map ;
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
map = new TreeMap<String, String>();
map.put("id","1");
map.put("amount","100");
list.add(map);
map = new TreeMap<String, String>();
map.put("id","2");
map.put("amount","500");
list.add(map);
map = new TreeMap<String, String>();
map.put("id","3");
map.put("amount","200");
list.add(map);
map = new TreeMap<String, String>();
map.put("id","4");
map.put("amount","10");
list.add(map);
map = new TreeMap<String, String>();
map.put("id","5");
map.put("amount","10000");
list.add(map);
Aquí está su código de clasificación
Collections.sort(list, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
String value1 = o1.get("amount");
String value2 = o2.get("amount");
return Integer.parseInt(value1)-Integer.parseInt(value2);
}
});
for (Map<String, String> map1 : list) {
String id = map1.get("id");
String amount = map1.get("amount");
System.out.println("amount= "+amount + " , " +"id = "+id);
}
Salida
amount= 10 , id = 4
amount= 100 , id = 1
amount= 200 , id = 3
amount= 500 , id = 2
amount= 10000 , id = 5
actualizar
Reemplazar return Integer.parseInt(value1)-Integer.parseInt(value2);
con el siguiente código si los valores son decimales.
return Double.valueOf(value1).compareTo(Double.valueOf(value2));
No .. No puede acortar ningún mapa según el valor utilizando el método de clasificación predeterminado. Debe escribir su método personalizado para ordenar. vea este enlace- TreeMap ordenar por valor
y sugiero usar treemap si quieres ordenado por clave.
¡Gracias!
Por defecto, la lista no está ordenada. Necesita el método Collections.sort () que toma Comparator . Así que parece que desea ordenar por amount
, debe implementar el comparador como se muestra a continuación.
Collections.sort(list, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
String amount1 = o1.get("amount");
String amount2 = o2.get("amount");
return new Integer(amount1).compareTo(new Integer(amount2));
}
});
Aquí está la copia de trabajo completa,
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> map1 = new TreeMap<String, String>();
map1.put("id", "2");
map1.put("amount", "200");
Map<String, String> map2 = new TreeMap<String, String>();
map2.put("id", "1");
map2.put("amount", "100");
Map<String, String> map3 = new TreeMap<String, String>();
map3.put("id", "3");
map3.put("amount", "300");
list.add(map1);
list.add(map2);
list.add(map3);
Collections.sort(list, new Comparator<Map<String, String>>() {
@Override
public int compare(Map<String, String> o1, Map<String, String> o2) {
String amount1 = o1.get("amount");
String amount2 = o2.get("amount");
return amount1.compareTo(amount2);
}
});
System.out.println(list);
Debe imprimir,
[{amount=100, id=1}, {amount=200, id=2}, {amount=300, id=3}]
Tienes que usar Comparator personalizado y pasarlo en el constructor Treemap. Por ejemplo, para ordenarlo con el uso de cantidad siguiente comparador:
Consulte el siguiente enlace. Definitivamente resolverá tu problema
http://java2novice.com/java-collections-and-util/treemap/comparator-user-object/
Utilice sort ()
Ex:
list.add(map);
Collections.sort(list)
System.out.println(list)
ahora imprimirá la lista en orden ascendente del tipo de contenido que contiene.