una por ordenar objetos numeros nombres nombre metodo listas lista imprimir como burbuja atributo alfabeticamente java sorting arraylist java-collections-api

por - ordenar una lista de numeros en java



Ordenar una ArrayList por tipo booleano primitivo (7)

Quiero ordenar mi ArrayList usando un tipo booleano. Básicamente quiero mostrar entradas con true primero. Aquí está mi código a continuación:

Abc.java

public class Abc { int id; bool isClickable; Abc(int i, boolean isCl){ this.id = i; this.isClickable = iCl; } }

Main.java

List<Abc> abc = new ArrayList<Abc>(); //add entries here //now sort them Collections.sort(abc, new Comparator<Abc>(){ @Override public int compare(Abc abc1, Abc abc2){ boolean b1 = abc1.isClickable; boolean b2 = abc2.isClickable; if (b1 == !b2){ return 1; } if (!b1 == b2){ return -1; } return 0; } });

Ordenar antes de ordenar: verdadero verdadero verdadero falso falso falso falso falso falso

Ordenar después de ordenar: falso falso verdadero verdadero verdadero verdadero falso falso falso falso


¿Por qué no usar algo como esto, es más fácil y java 8

listOfABCElements = {true, false, false, true, true}; listOfABCElements.stream().sorted(Comparator.comparing(Abc::isClickable,Comparator.reverseOrder()).collect(Collectors.toList());

salida: verdadero, verdadero, verdadero, falso, falso

reverseOrder es para orden primero verdadero y después falso, en otros casos, falsos va primero

listOfABCElements.stream().sorted(Comparator.comparing(Abc::isClickable).collect(Collectors.toList());

salida: falso, falso, verdadero, verdadero, verdadero


En este caso, una de las soluciones más fáciles es convertir booleanos en enteros, donde false es 0 y true es 1 . Luego regresa la diferencia del segundo y el primero.

Asi que:

int b1 = abc1.isClickable ? 1 : 0; int b2 = abc2.isClickable ? 1 : 0; return b2 - b1

Deberías hacerlo.


Java 8:

Collections.sort(abc, (abc1, abc2) -> Boolean.compare(abc2.isClickable(), abc1.isClickable()));


Otra forma de ir es:

Collections.sort(abc, new Comparator<Abc>() { @Override public int compare(Abc abc1, Abc abc2) { return Boolean.compare(abc2.isClickable,abc1.isClickable); } });


Quiero que los artículos con valor true aparezcan primero. Mi solución sería:

Collections.sort(m_mall, new Comparator<Mall>(){ @Override public int compare(Mall mall1, Mall mall2){ boolean b1 = mall1.isClickable; boolean b2 = mall2.isClickable; return (b1 != b2) ? (b1) ? -1 : 1 : 0; } });


También es posible de esa manera.

myList.sort((a, b) -> Boolean.compare(a.isSn_Principal(), b.isSn_Principal()));


Una sugerencia simple sería usar el objeto Boolean lugar de booleano y usar Collections.sort .

Sin embargo, debe saber que el false estará antes del true porque el verdadero se representa como 1 y el falso como 0 . Pero entonces, simplemente puede cambiar su algoritmo y acceder en orden inverso.

Edición : como lo indicó soulscheck, puede usar Collections.reverseOrder para revertir el orden impuesto por el Comparador.