Schön, Allgemeinen Art und Weise zu Sortieren Nullen in der unteren, unabhängig?
Schreibe ich einige custom-Komparatoren, und dann möchte ich Ihnen push-null-Elemente an der Unterseite der Liste, unabhängig davon, ob ich die Sortierung auf-oder absteigend. Was ist eine gute Strategie oder das Muster für die Annäherung an diese?
Offhand:
- Einfach schreibst aufsteigend
absteigend Komparatoren, die Freigabe von code
wo möglich - Delegieren die Behandlung von null zu einem anderen
Klasse, entweder durch das werfen einer NPE oder
durch den Aufruf explizit - Gehören eine aufsteigende Flagge und setzen
bedingten Logik, in ihm zu navigieren
um die null-Werte - Wrap regular Komparatoren in einem
null-handling-Klasse
Andere Strategien? Ich würde gerne hören, über Erfahrungen mit unterschiedlichen Ansätzen, und alle Fallstricke, die für die verschiedenen Strategien.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Letzte option gefällt mir sehr. Komparatoren sind wirklich toll zur Kette zusammen. Insbesondere können Sie auch schreiben wollen
ReverseComparator
sowie eineNullWrappingComparator
.EDIT: Du musst nicht schreiben diese selbst. Wenn man sich die Bestellen Klasse in der Google Collections Library finden Sie diese und allerlei andere leckereien 🙂
EDIT: Geht mehr ins detail, um zu zeigen, was ich meine über
ReverseComparator
...Ein Wort der Warnung - bei der Umsetzung einer
ReverseComparator
, ist die Reihenfolge der Argumente statt negieren das Ergebnis, wie sonstInteger.MIN_VALUE
ist "Umgekehrt" zu sich selbst.Also diese Implementierung ist falsch (vorausgesetzt
original
ist der Komparator auf Rückseite):aber das ist richtig:
Der Grund ist, dass wir immer umkehren wollen den Vergleich, aber wenn
original.compare(x, y)
zurückint.MIN_VALUE
, dann die schlechte comparer wird auch zurückint.MIN_VALUE
ab, was falsch ist. Dies ist bedingt durch die komische Eigenschaft, dassint.MIN_VALUE == -int.MIN_VALUE
.Ich Stimme mit Jon Skeet (es ist so einfach :). Ich habe versucht zu implementieren, die eine sehr einfache Dekorateur:
gegeben Komparator:
und einige test-Daten:
können Sie Sortieren, mit null am Ende:
oder am Anfang:
Folgenden bis auf dfa Antwort - was ich will, ist, dass die null-Werte Sortieren Sie am Ende, ohne die Anordnung der nicht-null-Werte. So möchte ich etwas mehr entlang den Linien von:
Vollen Kredit der dfa, obwohl - dies ist nur eine kleine Modifikation seiner Arbeit.
In Java 8 verwenden, können Sie die
Komparator.nullsLast
undKomparator.nullsFirst
statische Methoden haben mehr null-freundlich-Komparatoren. Angenommen, Sie haben eineFruit
Klasse wie die folgenden:Wenn Sie möchten, zu Sortieren, ein paar Früchte durch Ihre Größe und legen Sie die
null
s am Ende:Können Sie einfach schreiben:
Und das Ergebnis wäre:
Konnte man immer verwenden
NullComparator
von commons-collections. Es gibt Sie schon länger als Google-Sammlungen.