Java List集合取交集的五种方式
在Java中,可以使用以下五种方法来获取两个List集合的交集:
- 使用
removeAll()
方法 - 使用Java 8的
stream()
方法配合filter()
方法 - 使用
retainAll()
方法 - 使用
Collections.disjoint()
方法检查是否有交集,然后使用addAll()
方法 - 使用Apache Commons Collections的
CollectionUtils.retainAll()
方法
以下是每种方法的示例代码:
- 使用
removeAll()
方法:
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));
list1.removeAll(list2); // list1现在只包含1,2
- 使用Java 8的
stream()
方法配合filter()
方法:
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));
List<Integer> intersection = list1.stream()
.filter(list2::contains)
.collect(Collectors.toList());
- 使用
retainAll()
方法:
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));
list1.retainAll(list2); // list1现在只包含3,4,5
- 使用
Collections.disjoint()
方法检查是否有交集,然后使用addAll()
方法:
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));
if (!Collections.disjoint(list1, list2)) {
list1.addAll(list2);
}
- 使用Apache Commons Collections的
CollectionUtils.retainAll()
方法:
List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3, 4, 5, 6, 7));
CollectionUtils.retainAll(list1, list2); // list1现在只包含3,4,5
注意:使用第5种方法之前需要添加Apache Commons Collections库依赖。
评论已关闭