languages.stream()
.sorted((s1, s2) -> Double.compare(s2.getRanking(), s1.getRanking()));
Что значит (s1, s2)? И как к ним присваеваются значения?
По какому принципу мы сортирует сравненые значения?
Богдан
26 уровень
Объясните пожалуйста
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Enterprise Java Developer
14 марта, 22:03решение
sorted это промежуточная операция на стриме с состоянием. Она принимает в себя объект типа Comparator через который прогоняет элементы стрима. Куда как интереснее как именно эта сортировка происходит ведь поток данных не прерывается, по мере их поступления. Но тут у меня ответа нет. Могу предположить что раз операция с состоянием, то это самое состояние и помогает определить в какое именно место новоприбывший элемент следует вставить на выходе, ну а сравнения производятся именно компаратором. Возможно там какое-то дерево под капотом.
Что до самого Comparator тут все просто - это функциональный интерфейс с одним методом
Собственно вот эти самые o1 и o2 и есть твои s1 и s2. Ты просто написал реализацию метода функционального интерфейса. Такая запись называется лямбда выражением, ну или просто лямбдой.
Если тебе более знакома тема анонимных классов то вот эквивалентная запись.
Вопрос про принцип сортировки не понял, скорее всего это обычая математическая сортировка по убыванию (второй объект сравнивается с первым). Если говорить о реализации - зайди в Double.compare и почитай. +4
Богдан
15 марта, 14:29
Спасибо большое!!! Сколько не гуглил так сам и не понял
0