Sortieren nach Datum. Komparator. Java
den nächsten snippet entnommen diese java tutorial, vergleicht das zweite argument-Objekt für die ersten ein, anstatt Umgekehrt.
*Die Methode Einstellungsdatum() liefert ein Date-Objekt für die Vermietung das Datum des jeweiligen Mitarbeiters.
import java.util.*;
public class EmpSort {
static final Comparator<Employee> SENIORITY_ORDER =
new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
return e2.hireDate().compareTo(e1.hireDate());
}
};
Hier ist das java-tutorial Erklärung:
Beachten Sie, dass der Komparator übergibt die Einstellung Datum seiner zweiten argument
zu seiner ersten, eher als Umgekehrt. Der Grund dafür ist, dass der Arbeitnehmer
wer war gemietet zuletzt ist die mindestens senior; Sortierung in der Reihenfolge
der Einstellungsdatum würde die Liste in umgekehrter Seniorität um.
Ich noch nicht bekommen, warum durch Invertierung e1 und e2 in compareTo
es sollte das Problem beheben.
Jede weitere Klärung?
Vielen Dank im Voraus.
InformationsquelleAutor Rollerball | 2013-04-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Natürliche Ordnung auf Termine (wie definiert durch
compareTo
) ist, dass die späteren Datum "größer als" der frühere. Für den zeitrang der person, die dort gewesen ist, der länger ist, mehr ältere, D. H. Sie wollen die früher start-Datum, zu bedeuten, dass höhere Seniorität als der später ein.Seit dem Vertrag von
Comparator
besagt, dass wenncompare(a,b) != 0
danncompare(a,b)
undcompare(b,a)
müssen entgegengesetzte Vorzeichen, haben Sie zwei Möglichkeiten für die Umsetzung eines reverse bestellt-Vergleich vona
undb
- entweder zurück-(a.compareTo(b))
oderb.compareTo(a)
- Sie sind garantiert, um das gleiche Zeichen.Werden Sie nicht unbedingt das gleiche Wert, aber das einzige, was zählt für die Komparator-Ergebnisse ist, ob Sie
>
,<
oder==
0 - während viele Beispiele verwenden-1
,0
und+1
alle Wert mit den richtigen Zeichen ist in Ordnung.am Ende zählt, was es in den von der Methode user.
Ich verstehe nicht, was Sie gefragt haben. Das code-snippet Sie bereitgestellt haben, in der Frage ist nur ein Weg, um zu definieren, ein Komparator, zwei Mitarbeiter und sagen Ihnen, was ein älterer, indem Sie die mit der früheren
hireDate()
, es ist nicht "zählen" nichts.Ich verstehe nicht, warum es wichtig ist, dass e2.Einstellungsdatum().compareTo(e1.Einstellungsdatum()) es unterscheidet sich von e1.Einstellungsdatum().compareTo(e2.Einstellungsdatum()). Ich nicht im Voraus wissen, welche der beiden Objekt älter oder jünger (in Bezug auf Dienstalter). Ich könnte einen positiven oder einen negativen Wert von compareTo.
wenn Sie eine Liste der Mitarbeiter und sortiert, die Liste mit einem comparator, der hat
e1.hireDate().compareTo(e2.hireDate())
dann würden Sie bekommen, Sie bestellt die meisten senior bis zuletzt senior (d.h. in reverse Reihenfolge des Dienstalters). Wenn Sie die Art vone2.hireDate().compareTo(e1.hireDate())
man Sie bestellt mindestens senior für die meisten Senioren.InformationsquelleAutor Ian Roberts
Wenn Sie möchten, um die Sortierreihenfolge zu ändern, dann verwenden Sie:
Spielen Sie nicht mit dem Komparator.
InformationsquelleAutor camickr
Komparator ist
compare
Methode erwartet, um zurückzukehren, -1, 0, oder 1 wenne1<e2
,e1==e2
odere1>e2
. Also, wenn der Letzte Auftrag, den Sie erhalten, ist genau das umgekehrte gewünscht, einfach invertiert a-und b-behebt das problem.InformationsquelleAutor Miguel Prz