Java中列表上的AND/OR操作

Dee*_*jan 2 java list java-8

让我们考虑两个arraylists.

ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
list1.add(2);
list1.add(3);

ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(3);
list2.add(4);
list2.add(5);
Run Code Online (Sandbox Code Playgroud)

我想在这些列表之间执行AND和OR操作.例如,这里当我执行AND操作时,b/w list1&list2输出应该是一个只包含3的列表,当我执行OR操作时b/w list1&list2输出应该是一个包含1,2,3,4,5的列表(不要重复两次).

Java中是否有可能实现这种情况?在这种情况下我们可以使用Java 8 Streams吗?请给我最有效的方法来得到答案.

aio*_*obe 5

使用Stream API:

List<Integer> union = Stream.concat(list1.stream(), list2.stream())
                            .distinct()
                            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

List<Integer> intersection = list1.stream()
                                  .filter(list2::contains)
                                  .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

没有Stream API:

List<Integer> intersection = new ArrayList<>(list1);
intersection.retainAll(list2);
Run Code Online (Sandbox Code Playgroud)

List<Integer> union = new ArrayList<>(list1);
List<Integer> toAdd = new ArrayList<>(list2);
toAdd.removeAll(list1);  // avoid duplicates
union.addAll(toAdd);
Run Code Online (Sandbox Code Playgroud)