我有两个列表 A 和 B。都有数百万个元素。我想比较并获取列表 A 中但不在列表 B 中的所有元素。下面是获取元素的低效方法。 if (!B.containsAll(A)) { for (Integer id : A) { if (!B.contains(id)) { System.out.println(id); } } }我正在寻找一种有或没有流的有效方法来获取元素在这方面的帮助表示赞赏。
2 回答
12345678_0001
TA贡献1802条经验 获得超5个赞
你不需要比较
List<Integer> c = new ArrayList<>(a);
c.removeAll(b);
如果您不介意丢失原始列表数据
a.removeAll(b);
茅侃侃
TA贡献1842条经验 获得超21个赞
像这样的东西应该足够了:
Set<Integer> container = new HashSet<>(ListB);
ListA.stream()
.filter(id -> !container.contains(id))
.forEach(System.out::println);
或非流:
Set<Integer> container = new HashSet<>(ListB);
for(Integer id : ListA)
if(!container.contains(id));
System.out.println(id);
添加回答
举报
0/150
提交
取消