java, comparator interface, ich soll ein attribut anlegen von Comparator<String>, was ist damit gemeint eine anonyme Klasse?
Ich soll zwei strings lexikalisch vergleichen, was ich nicht kapiere, ich soll das mit einem Comparator<String> Attribut tun. Meint man damit eine anonyme Klasse? Wenn ja, ich habe eine Anonymeklasse erstellt nun, ist da die Methode:
public int compare(String o1, String o2) {}
muss ich die selber ausfüllen? Also wie die Strings verglichen werden? Wenn ja, wozu nutze ich dann überhaupt Comparator? Ich könnte dann doch gleich einfach eine MEthode erstellen und selber sagen, wie ich den Vergleich haben möchte?
1 Antwort
Bei Strings ist es wirklich unsinnig, einen eigenen Comparator zu bauen, weil die String-Klasse schon Comparable<String> implementiert (also es gibt eine compareTo Funktion) und zusätzlich die Funktion compareToIgnoreCase und den Comparator CASE_INSENSITIVE_ORDER eingebaut hat. Da würde also normalerweise niemand einen eigenen Comparator für bauen.
Wenn du ein Interface als anonyme Klasse implementierst, musst du die Funktionen immer selbst ausfüllen. Ob du es jetzt als anonyme Klasse oder als echte Klasse oder vielleicht auch nur als Lambda machst, bleibt dir überlassen.
Deinen letzten Satz verstehe ich irgendwie nicht so ganz. Der Comparator ist ja genau dafür da, dass du selbst sagen kannst, wie du den Vergleich haben möchtest.
Beispiele als Lambda:
Comparator<String> stringComparator = (s1, s2) -> s1.compareTo(s2);
// oder
Comparator<String> stringComparator = String::compareTo;
Als anonyme Klasse:
Comparator<String> stringComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
};
Als innere Klasse (lässt sich genauso auch als echte Klasse machen)
private static class StringComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
}
Comparator<String> stringComparator = new StringComparator();