list.sort((lh, rh) ->
lh.count != rh.count ? lh.count - rh.count : lh.index - rh.index
);
Здесь list
отсортировано по предоставленному лямбда-методу, который представляет метод для определения, находится ли один элемент до или после другого элемента.
Сравнение выполняется с помощью lh.count != rh.count ? lh.count - rh.count : lh.index - rh.index
. Если count
обоих элементов не равны, элементы сортируются по count
. Если lh.count
меньше, чем rh.count
, то лямбда возвращает отрицательное значение, в противном случае оно является положительным. Если count
одинаково для обоих, то сравнение выполняется для index
.
Полученные числа используются списком для определения порядка элементов. Лямбда реализует метод Comparator#compare
. Проверьте его документацию для деталей. Отрицательное число указывает на то, что первый аргумент находится перед вторым.
Как работает сортировка ArrayList пользовательского объекта?
В общем случае путем предоставления Comparator
, чтобы описать порядок пользовательских элементов, то есть, как определить, находится ли один элемент до или после другого элемента.