Любое предлагает простое объяснение того, как этот список сортируется и почему код в анонимной функции работает, чтобы первый элемент отсортированного списка всегда был последним лексикографическим словом вверху. Я понимаю, что если CompareTo возвращает -1 0 и 1 по сравнению, но код, кажется, подразумевает, что параметры o1 и o2 можно сравнить одновременно ...Анонимные функции Collections.sort java
List<String> allNames = new ArrayList<>();
allNames("Alfred");
allNames("Mary");
allNames("Hilda");
allNames("Zenda");
allNames("Thomas");
allNames("Isabel");
Collections.sort(allNames, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.equals("Zenda") && !o2.equals("Zenda")){
return -1;
} else if (o2.equals("Zenda") && !o1.equals("Zenda")){
return 1 ;
}
return o1.compareTo(o2);
}
});
Но означает ли это, что o1 и o2 могут быть одним и тем же объектом? Как представляется, код, похоже, ищет равные по двум аргументам в тех же условных операторах If? – DevelopeXCode
Они могут быть, конечно. Первые условные проверки, если «o1» - «Zenda» и «o2», не являются «Zenda», а второй условный - наоборот. Например, если они были «Zenda», то возникает условие «else». 'o1.compareTo (o2)' будет возвращать '0', если они являются одним и тем же объектом, который сообщает методу сортировки, что относительный порядок этих двух объектов не имеет значения (потому что они одинаковы). – Zircon
Не смысл быть придирчивым, но кто-нибудь знает, какой алгоритм используется, чтобы я мог визуализировать реализацию. Что происходит за кулисами, если легко объяснить ... – DevelopeXCode