Словарь сортировки ArrayList из Arraylist <Integer>в Java - PullRequest
0 голосов
/ 23 марта 2019

Я хочу отсортировать ArrayList из ArrayList<Integer>, который выглядит следующим образом.

ArrayList<ArrayList<Integer>> allres = new ArrayList<ArrayList<Integer>>();
Collections.sort(allres, new Comparator<ArrayList<Integer>>() {
    public int compare(ArrayList<Integer> a, ArrayList<Integer> b) {
        for (int i = 0; i < a.size(); i++) {
            if (a.get(i) < b.get(i)) {
                return -1;
            } else if (a.get(i) == b.get(i)) {
                continue;
            } else {
                return 1;
            }
        }
        return -1;
    }
});

Но для некоторого ввода, он не дает результат сортировки по словарю.

1 Ответ

1 голос
/ 23 марта 2019

Функции компаратора, содержащие 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. Сравните по первому критерию.
  2. Если заданные значения отличаются, вернуть результат сравнения и все будет сделано.
  3. Возьмите следующий критерий, перейдите к шагу 1.
  4. Если критериев не осталось, вернуть 0.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...