Napisałem dwa comparatory do porównywania stringów.
public static void main(String[] args) {
Comparator comparator = new MyComparator();
Comparator comparator1 = comparator.thenComparing(new MyNextComparator());
TreeMap<String, Integer> treeMap = new TreeMap<>(comparator1);
}
class MyComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
String a = o1.substring(o1.length() - 1);
String b = o2.substring(o2.length() - 1);
return a.compareTo(b);
}
}
class MyNextComparator implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
}
Mój problem jest taki że nie rozumiem jak to się dzieje że obydwa comparatory są przechowywane w obiekcie MyNextComparator castowanym na Comparator.
IntelliJ pokazuje ten obiekt jako zawierający dwa pola finalne (domyślam się że to te comparatory).
Podpowie mi ktoś o co tutaj chodzi albo co mam przeczytać żeby ogarnąć mechanizm działania tego zjawiska?