Cómo ordenar ArrayLists utilizando booleanos en java?

Tengo un ArrayList con objetos de encargo. Contienen un objeto de casilla de verificación en el que quiero ordenar. Estoy utilizando esta función de comparación para ordenarla:

Estoy utilizando el operador XOR para comprobar si son iguales entre sí, y luego negarlo.

Sin embargo esto no está funcionando, y la lista se mantiene en el mismo orden.

¿Alguien sabe lo que está mal?

public class CustomSelectSort implements Comparator<ObjPerson> { @Override public int compare(ObjPerson o1, ObjPerson o2) { return !(o1.select.isChecked() ^ o2.select.isChecked()) ? 1 : -1; } } 

Sólo devuelve -1 (menos que) o +1 (mayor que), nunca 0 (igual a).

Consulte la definición de java.util.Comparator :

Compara sus dos argumentos para el orden. Devuelve un entero negativo, cero o un entero positivo, ya que el primer argumento es menor que, igual o mayor que el segundo.

En la descripción anterior, la notación sgn (expresión) designa la función signum matemática, que se define para devolver uno de -1, 0 o 1 según que el valor de la expresión sea negativo, cero o positivo.

El implementador debe asegurar que sgn (compare (x, y)) == -sgn (compare (y, x)) para todo x e y. (Esto implica que comparar (x, y) debe lanzar una excepción si y sólo si compara (y, x) lanza una excepción.)

El implementador también debe asegurarse de que la relación sea transitiva: ((compare (x, y)> 0) && (compare (y, z)> 0)) implica comparar (x, z)> 0.

Finalmente, el implementador debe asegurarse de que comparar (x, y) == 0 implica que sgn (compare (x, z)) == sgn (compare (y, z)) para todo z.

Generalmente es el caso, pero no se requiere estrictamente que (compare (x, y) == 0) == (x.equals (y)). En términos generales, cualquier comparador que viole esta condición debe indicar claramente este hecho. El lenguaje recomendado es "Nota: este comparador impone ordenaciones que son inconsistentes con iguales".

Propuesta antes de Java 1.7:

 public int compare(ObjPerson o1, ObjPerson o2) { boolean b1 = o1.select.isChecked(); boolean b2 = o2.select.isChecked(); if( b1 && ! b2 ) { return +1; } if( ! b1 && b2 ) { return -1; } return 0; } 

Propuesta desde Java 1.7 :

 public int compare(ObjPerson o1, ObjPerson o2) { boolean b1 = o1.select.isChecked(); boolean b2 = o2.select.isChecked(); return Boolean.compare( b1, b2 ); } 
  • Java, ordene un ArrayList con entradas más largas al final
  • La columna MediaStore.MediaColumns.TITLE de MediaStore de Android es nula para algunos archivos
  • Android - XML ​​serialization - simpleframework - Ruta con Elementos opcionales (required = false) - ¿Cómo ocultar valores nulos?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.