No se puede ordenar la lista por orden ascendente

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 la 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? Aprecio cualquier ayuda. Gracias por adelantado.

Salida esperada: 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 

Suponiendo 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 código siguiente si los valores son decimales.

 return Double.valueOf(value1).compareTo(Double.valueOf(value2)); 

Utilizar 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.

No .. No se puede cortar ningún mapa según el valor utilizando el método de clasificación por defecto. Debe escribir su método personalizado para ordenar. ver este enlace- TreeMap ordenar por valor

y sugiero treemap uso si desea ordenado por clave ..

¡Gracias!

Tienes que usar el comparador personalizado y pasarlo en el constructor de Treemap. Por ejemplo para clasificarlo con el uso de la cantidad después de la comparación:

Consulte el siguiente enlace. Definitivamente resolverá su problema

http://java2novice.com/java-collections-and-util/treemap/comparator-user-object/

De forma predeterminada, la lista no está ordenada. Necesitas el método Collections.sort () que toma el comparador . Así que parece que desea ordenar por amount , debe implementar el comparador como 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}] 
  • ¿Javax.crypto trabaja diferentemente en diversas versiones de OS androide?
  • SDK de Android: Análisis de JSON de la URL mediante GSON
  • ¿Cómo usar `adb` para instalar aplicaciones de desarrollo para un solo usuario?
  • ¿Cuál es la lógica de diseño detrás de Fragmentos como clases internas estáticas vs clases públicas independientes?
  • ProGuard puede causar cálculos incorrectos
  • ¿Cómo AOT hace la compilación Andorid mejor?
  • IntelliJ / Android Studio: eliminar el uso innecesario de 'esto.'
  • Utilizando RxJava para la validación de inicio de sesión de correo electrónico, un observable está emitiendo dos veces
  • Pasar de una actividad a otra
  • ¿Cómo mostrar la barra de progreso hasta que el video se reproduzca en streaming en vivo Android?
  • El emulador de Android cierra usando telnet vía script de appium
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.