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

时间:2019-05-31 06:01:49

标签: java list java-8 java-7

我对虚拟图的启发式方法有一个问题,在该方法中,我必须对两个整数列表中的数字元素进行计数:我必须在列表中放入第一个数字和不包含在其中的数字第二个列表。

我尝试了两个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。

2 个答案:

答案 0 :(得分:0)

ls2ls1中存在的元素删除为:

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 :(得分:0)

你好,@吉列尔莫·加里多,

您似乎想从列表1中减去列表2。

如果您在项目中使用apache-commons,则只需执行以下操作即可:

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

或者,如果您想使用简单的Java进行操作,请查看@Naman的答案。