Java中获取集合元素交集的四种方法详解
2023-10-04 21:32:48
正文
在 Java 中,集合元素交集是指两个集合中共同的元素。获取集合元素交集有四种常见的方法:Set.retainAll()、List.retainAll()、Java 8 的 Stream.filter() 和 Guava 库的 Sets.intersection() 方法。
1. Set.retainAll() 方法
Set.retainAll() 方法是 Java 中获取集合元素交集最直接的方法。该方法将当前集合与另一个集合进行比较,并将当前集合中不在另一个集合中的元素删除。
Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> set2 = new HashSet<>(Arrays.asList(3, 4, 5, 6, 7));
set1.retainAll(set2);
System.out.println(set1); // 输出:[3, 4, 5]
Set.retainAll() 方法的优点在于简单易用,缺点在于它会修改当前集合。如果不想修改当前集合,可以使用 List.retainAll() 方法。
2. List.retainAll() 方法
List.retainAll() 方法与 Set.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);
System.out.println(list1); // 输出:[3, 4, 5]
List.retainAll() 方法的优点在于不会修改当前列表,缺点在于它只适用于列表集合。如果想对其他类型的集合进行操作,可以使用 Java 8 的 Stream.filter() 方法。
3. Java 8 的 Stream.filter() 方法
Java 8 的 Stream.filter() 方法可以对集合中的元素进行过滤,并返回一个新的集合。我们可以使用 Stream.filter() 方法来获取两个集合的元素交集。
Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> set2 = new HashSet<>(Arrays.asList(3, 4, 5, 6, 7));
Set<Integer> intersection = set1.stream()
.filter(set2::contains)
.collect(Collectors.toSet());
System.out.println(intersection); // 输出:[3, 4, 5]
Stream.filter() 方法的优点在于通用性强,可以对任何类型的集合进行操作。缺点在于代码相对复杂,需要对 Java 8 的 Stream API 有所了解。
4. Guava 库的 Sets.intersection() 方法
Guava 库是一个开源的 Java 库,提供了许多实用的工具方法。Sets.intersection() 方法是 Guava 库中用于获取集合元素交集的方法。
Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> set2 = new HashSet<>(Arrays.asList(3, 4, 5, 6, 7));
Set<Integer> intersection = Sets.intersection(set1, set2);
System.out.println(intersection); // 输出:[3, 4, 5]
Sets.intersection() 方法的优点在于简单易用,代码简洁。缺点在于需要引入 Guava 库。
对比总结
四种获取集合元素交集的方法各有优缺点,开发者可以根据自己的需求选择最合适的方法。下表对这四种方法进行了对比总结:
方法 | 优点 | 缺点 |
---|---|---|
Set.retainAll() | 简单易用 | 会修改当前集合 |
List.retainAll() | 不修改当前集合 | 只适用于列表集合 |
Java 8 的 Stream.filter() | 通用性强 | 代码相对复杂 |
Guava 库的 Sets.intersection() | 简单易用,代码简洁 | 需要引入 Guava 库 |
结语
本文介绍了 Java 中求两个集合元素交集的四种方法,并对这四种方法进行了对比总结。希望本文能对读者有所帮助。