java, comparator interface, ich soll ein attribut anlegen von Comparator<String>, was ist damit gemeint eine anonyme Klasse?

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();