Wie sortiere ich ArrayLists mit booleans in Java?

8

Ich habe eine ArrayList mit benutzerdefinierten Objekten. Sie enthalten ein Checkbox-Objekt, nach dem ich sortieren möchte. Ich verwende diese Komparatorfunktion, um sie zu sortieren:

Ich verwende den XOR-Operator, um zu prüfen, ob sie einander gleich sind, und negiere sie dann.

Dies funktioniert jedoch nicht und die Liste bleibt in der gleichen Reihenfolge.

Weiß jemand, was falsch ist?

%Vor%     
omega 25.08.2013, 21:41
quelle

1 Antwort

19

Sie geben nur -1 (kleiner als) oder +1 (größer als), niemals 0 (entspricht) zurück.

Siehe java.util.Comparator Definition :

  

Vergleicht seine beiden Argumente für die Reihenfolge. Gibt eine negative Ganzzahl zurück,   Null oder eine positive Ganzzahl als erstes Argument ist kleiner als, gleich   zu oder größer als der zweite.

     

In der vorstehenden Beschreibung bezeichnet die Schreibweise sgn (Ausdruck)   die mathematische Signum-Funktion, die definiert ist, um eine von   -1, 0 oder 1, je nachdem, ob der Wert des Ausdrucks negativ, null oder positiv ist.

     

Der Implementierer muss sicherstellen, dass sgn (vergleiche (x, y)) == -sgn (vergleiche (y,   x)) für alle x und y. (Dies impliziert, dass compare (x, y) einen werfen muss.)   Ausnahme wenn und nur wenn compare (y, x) eine Ausnahme auslöst.)

     

Der Implementierer muss auch sicherstellen, dass die Beziehung transitiv ist:   ((vergleiche (x, y) & gt; 0) & amp; & amp; (vergleiche (y, z) & gt; 0)) impliziert Vergleich (x, z) & gt; 0.

     

Schließlich muss der Implementierer sicherstellen, dass compare (x, y) == 0 impliziert   dass sgn (vergleiche (x, z)) == sgn (vergleiche (y, z)) für alle z.

     

Es ist im Allgemeinen der Fall, aber nicht unbedingt erforderlich, dass (vergleiche (x,   y) == 0) == (x.equals (y)). Im Allgemeinen jeder Komparator, der   Verstöße gegen diese Bedingung sollten diese Tatsache deutlich anzeigen. Das   Empfohlene Sprache ist "Hinweis: Dieser Komparator führt Ordnungen, dass   sind inkonsistent mit Gleichgestellten. "

Vorschlag vor Java 1.7:

%Vor%

Vorschlag seit Java 1.7 :

%Vor%     
Aubin 25.08.2013, 21:45
quelle

Tags und Links