Функции компаратора, содержащие 1
или -1
, подвержены ошибкам.
Вместо этого вы должны написать это так:
public static int lexicographically(List<Integer> a, List<Integer> b) {
for (int i = 0, end = Math.min(a.size(), b.size()); i < end; i++) {
int res = Integer.compare(a.get(i), b.get(i));
if (res != 0)
return res;
}
return Integer.compare(a.size(), b.size());
}
Этот стиль написания функций компаратора предотвращает различные распространенные ошибки, например, никогда не возвращает 0.
Самый важный шаблон в этом стиле:
- Сравните по первому критерию.
- Если заданные значения отличаются, вернуть результат сравнения и все будет сделано.
- Возьмите следующий критерий, перейдите к шагу 1.
- Если критериев не осталось, вернуть 0.