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

Java 如何在列表中保存第一个列表中未包含在具有重复值的第二个列表中的元素?,java,list,java-8,java-7,Java,List,Java 8,Java 7,我对虚拟图的启发式有一个问题,我必须从两个整数列表中计算数字元素:我必须将第一个列表中的数字和不在第二个列表中的数字放入一个列表。 我尝试了两个addAll和一个removeAll(secondList),它可以工作,但是当列表有重复项时,它就不工作了,因为它也删除了重复的元素: //测试列表 List ls1=Arrays.asList(1,1,2,3); List ls3=Arrays.asList(1,3); 列表s=新的ArrayList(); s、 addAll(ls1); 系统输出打

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

我尝试了两个addAll和一个removeAll(secondList),它可以工作,但是当列表有重复项时,它就不工作了,因为它也删除了重复的元素:

//测试列表
List ls1=Arrays.asList(1,1,2,3);
List ls3=Arrays.asList(1,3);
列表s=新的ArrayList();
s、 addAll(ls1);
系统输出打印项次(“添加”+ls1);
s、 addAll(ls3);
系统输出打印项次(“添加”+ls3);
System.out.println(“新列表”+s);
s、 removeAll(ls3);
系统输出println(“期望值(1,2)”);
System.out.println(“结果列表”+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);
List ls1=Arrays.asList(1,1,2,3);
List ls2=Arrays.asList(1,3);
列表s=新阵列列表(ls1);
ls2.forEach(s::移除);
嗨@Guillermo Garrido

看起来您想从列表一中减去列表二

如果您在项目中使用的是apachecommons

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

或者,如果你想用简单的java来实现,那么看看@Naman的答案。

为什么不迭代列表ls1,只在没有以前的实例时才在新列表中添加元素呢?看看
list#retainal
集合是什么