valor por ordenar lista fecha array java android sorting arraylist treemap

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}]



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.