Wie bekomme ich die Umkehrung eines Komparators in Java?

8

In einer Methode erhalte ich ein generisches object E extends Comparable<E> als Argument. Jetzt möchte ich zwei Prioritätswarteschlangen erstellen. Eine, die das von E und einer anderen Warteschlange verwendete comparator verwendet, das das Gegenteil von comparator verwendet von E verwendet (dh wenn E '& lt;' verwendet, muss die zweite Warteschlange '& gt; = '). Bitte hep mir, wie man zwei solche Warteschlangen erstellt.

%Vor%

Ich bekomme den Fehler, dass reverseOrder nicht anwendbar ist.

bitte helfen

    
Abhinav Batra 10.09.2012, 04:46
quelle

4 Antworten

11

Sehen Sie sich Collections.reverseOrder an .

    
casablanca 10.09.2012, 04:48
quelle
5

Ihr Objekt E erweitert java.lang.Comparable, , aber es ist kein java.util.Comparator .

Erstellen Sie Ihre erste Queue ohne Comparator und Sie erhalten die Reihenfolge in Ihrer compareTo -Funktion und erstellen dann eine java.util.Comparator , die den Vergleich in umgekehrter Reihenfolge durchführt (rufen Sie einfach a.compareTo (b) auf und negieren Sie dann die Ergebnis) und erstellen Sie Ihre zweite Warteschlange mit diesem Komparator.

    
Bill 10.09.2012 05:26
quelle
1

Das einzige Argument von Collections .reverseOrder ist ein Vergleicher und keine Sammlung. Für Ihren Code verwenden Sie einfach reverseOrder ohne ein Argument. Sie müssen auch eine Nicht-Null-Initialgröße verwenden. Der folgende Code wird funktionieren.

%Vor%     
Stefan Birkner 26.07.2013 10:43
quelle
0

Unter Programm zeigt, wie es geht.

Ich habe StringLengthComparator , das basierend auf der Stringlänge vergleicht. Mit Collections.reverseOrder habe ich eine Warteschlange erstellt, die umgekehrt angeordnet ist und eine andere Warteschlange, die korrekt geordnet ist.

%Vor%

Es wird Ausgabe

gedruckt %Vor%     
Amit Deshpande 10.09.2012 05:59
quelle