У меня есть проблема с эвристикой для 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.

0
Guillermo Garrido 31 Май 2019 в 09:01

2 ответа

Лучший ответ

Удалить элементы, присутствующие в 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);
1
Naman 31 Май 2019 в 06:09

Привет @ Guillermo Garrido,

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

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

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

Или, если вы хотите сделать это с помощью простого Java, посмотрите на ответ @Naman.

0
yash 31 Май 2019 в 06:28