使用Java流比较两个字符串列表

时间:2018-11-05 14:04:20

标签: java list java-stream

我有两个列表A和B。两个列表都有数百万个元素。我想比较并获取列表A中的所有元素,而不是列表B中的所有元素。下面是获取元素的效率低下的方法。

   if (!B.containsAll(A)) {
        for (Integer id : A) {
            if (!B.contains(id)) {
                System.out.println(id);
            }
        }
    }

我正在寻找一种有或没有流来获取元素的有效方法

在这方面

帮助表示赞赏。

谢谢

2 个答案:

答案 0 :(得分:1)

您不需要比较

List<Integer> c = new ArrayList<>(a);
c.removeAll(b);

如果您不介意丢失原始列表数据

a.removeAll(b);

答案 1 :(得分:1)

这样的事情就足够了:

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);