Как обнаружить дубликат в списке списка на Java? - PullRequest
0 голосов
/ 03 апреля 2019

Я хочу обнаружить дубликат в списке списка.Например,

[[-1,0,-1][0,1,2][0,-1,-1]]

Под дубликатом я имел в виду, если список содержит одинаковые элементы в любом порядке.

Я попробовал одно решение, которое состоит в сортировке списка и вставке каждого из них в набор.Есть ли другой лучший способ сделать это?

Одна проблема, с которой я столкнулся, заключается в том, что если я вставлю список без сортировки в набор, он не будет обнаружен как дубликат.(т.е. [-1,0, -1] и [0, -1, -1])

Наконец, как я хочу, чтобы список был,

[[-1,0,-1][0,1,2]]

Обратите внимание, что то же самоездесь ответ на вопрос Java: лучший способ удалить дублированный список в списке , но он немного отличается от того, что я здесь задаю.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

вы можете играть с этой функцией Java8, это даст вам соответствующий список от одного к другому.

list.stream().allMatch(num -> matchingList.contains(num))

0 голосов
/ 03 апреля 2019

Я не знаю, является ли это ХОРОШИМ способом сделать это, но я продолжил и закодировал вашу идею использования наборов для поиска дублирующих списков. Работает нормально:

class Test {

    public static void main(String[] args) {

        List<List<Integer>> input = (List<List<Integer>>)JsonEncodeDecode.decode("[[-1,0,-1],[0,1,2],[0,-1,-1]]");

        List<List<Integer>> result = new ArrayList<>();
        List<Set<Integer>> sets = new ArrayList<>();
        for (List<Integer> sublist : input) {
            Set<Integer> set = new HashSet<>(sublist);
            if (!sets.contains(set)) {
                sets.add(set);
                result.add(sublist);
            }
        }
        System.out.println(JsonEncodeDecode.encode(result));
    }
}

Выход:

[[-1,0,-1],[0,1,2]]

JsonEncodeDecode - это мой собственный служебный класс, поэтому вы не сможете запустить его, не сделав что-либо еще для кодирования / декодирования JSON. Это просто мой способ построения конструкций и их печати. ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...