让我们考虑两个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吗?请给我最有效的方法来得到答案.
使用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)
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |