如何将第一个列表中未包含在具有重复值的第二个列表中的元素保存在列表中?

How a save in a list the elements of a first list that are not contained in a second list with duplicate values?

我对虚拟图的启发式算法有疑问,我必须从两个整数列表中计算数字的元素:我必须将第一个数字和数字的数字放入列表中不在第二个列表中。

我已经尝试使用两个 addAll 和一个 removeAll(secondList) 并且它可以工作但是当列表有 duplicates 它不起作用因为也删除了重复的元素:

        //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。

ls1 中删除 ls2 中的元素,如:

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 的回答。