У меня есть проблема с эвристикой для 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 ответа
Удалить элементы, присутствующие в 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);
Привет @ Guillermo Garrido,
Похоже, вы хотите вычесть второй список из первого списка.
Если вы используете apache-commons
в своем проекте, вы можете сделать это просто следующей строкой:
import import org.apache.commons.collections.ListUtils;
List<Integer> s = ListUtils.subtract(ls1, ls2);
Или, если вы хотите сделать это с помощью простого Java, посмотрите на ответ @Naman.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].