Как сохранить в списке элементы первого списка, которые не содержатся во втором списке с дублирующимися значениями? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть проблема с эвристикой для Virtual Graph, где я должен подсчитать элементы чисел из двух целочисленных списков: Я должен поместить в список номера первого и числа, которых нет в второй список.

Я пробовал с двумя addAll и removeAll (secondList), и это работает, но когда списки имеют дубликатов Это не работает, потому что удаляет дублирующий элемент тоже:

        //Test lists
        List<Integer> ls1 = Arrays.asList(1,1,2,3);
        List<Integer> ls3 = Arrays.asList(1,3);
        List<Integer> s = new ArrayList<>();

        s.addAll(ls1);
        System.out.println("Add " + ls1);
        s.addAll(ls3);
        System.out.println("Add " + ls3);
        System.out.println("New list" + s);
        s.removeAll(ls3);
        System.out.println("Expected value (1,2)");
        System.out.println("Result List " + s);

Новый список [1, 1, 2, 3, 1, 3], ожидаемый результат - [1,2], но фактический вывод - только 2.

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Удалить элементы, присутствующие в ls2 из ls1 как:

List<Integer> ls1 = Arrays.asList(1, 1, 2, 3);
List<Integer> ls2 = Arrays.asList(1, 3);
List<Integer> s = new ArrayList<>(ls1);
ls2.forEach(s::remove);
0 голосов
/ 31 мая 2019

Привет @ Guillermo Garrido,

Похоже, вы хотите вычесть второй список из списка один.

Если вы используете apache-commons в своем проекте, то вы можете сделать это простоследующая строка:

import import org.apache.commons.collections.ListUtils;
List<Integer> s = ListUtils.subtract(ls1, ls2);

Или, если вы хотите сделать это, используя простой Java, посмотрите на ответ @Naman.

...