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.
- ¿Cuál es la manera más eficiente de ordenar simultáneamente tres ArrayLists en Java
- Droid: ¿Cómo reordenar un contenido linearlayouts programáticamente?
- Arraylist de clasificación de Android por propiedades
- Cómo ordenar por random () en ORMLite
- Cómo mostrar los contactos en orden alfabético en ListView
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; } }
- Determinar el tipo de datos de una columna en SQLite
- Ordenar Java ArrayList con letras antes de números
- La mejor manera de reordenar elementos en Android 4 + ListView
- ¿Cómo especificar qué actividad se inicia al iniciar la aplicación?
- Estado de la orden de compra de Android In App
- Cómo ordenar varios ArrayLists todos juntos en java
- ¿Hay una manera fácil de arrastrar elementos en un ListView para cambiar su orden?
- Android Market, Razón de cancelación del pedido - Canceló este pedido
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 ); }
- Cómo configurar la fuente para TextView en android?
- ¿Cómo obtener el Uri de una imagen almacenada en el SDCARD?