Java-两个集合取交集(4种方式)
在Java中,可以使用以下四种方式来获取两个集合之间的交集:
- 使用
retainAll()
方法 - 使用Java 8的
stream()
方法配合filter()
- 使用
Collections.disjoint()
来判断是否有交集,然后再添加到结果集合中 - 使用Guava库的
Sets.intersection()
方法
以下是每种方法的示例代码:
- 使用
retainAll()
方法:
import java.util.HashSet;
import java.util.Set;
public class IntersectionExample {
public static void main(String[] args) {
Set<Integer> setA = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> setB = new HashSet<>(Arrays.asList(3, 4, 5, 6, 7));
setA.retainAll(setB);
System.out.println(setA); // 输出交集 {3, 4, 5}
}
}
- 使用Java 8的
stream()
方法配合filter()
:
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
public class IntersectionExample {
public static void main(String[] args) {
Set<Integer> setA = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> setB = new HashSet<>(Arrays.asList(3, 4, 5, 6, 7));
Set<Integer> intersection = setA.stream()
.filter(setB::contains)
.collect(Collectors.toSet());
System.out.println(intersection); // 输出交集 {3, 4, 5}
}
}
- 使用
Collections.disjoint()
来判断是否有交集,然后再添加到结果集合中:
import java.util.HashSet;
import java.util.Set;
public class IntersectionExample {
public static void main(String[] args) {
Set<Integer> setA = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> setB = new HashSet<>(Arrays.asList(3, 4, 5, 6, 7));
Set<Integer> intersection = new HashSet<>();
for (Integer num : setA) {
if (!Collections.disjoint(setB, Collections.singleton(num))) {
intersection.add(num);
}
}
System.out.println(intersection); // 输出交集 {3, 4, 5}
}
}
- 使用Guava库的
Sets.intersection()
方法:
首先需要添加Guava库依赖到项目中。
<!-- 添加Guava库依赖 -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1-jre</version> <!-- 请使用最新版本 -->
</dependency>
然后使用Sets.intersection()
方法:
import com.google.common.collect.Sets;
import java.util.Set;
public class IntersectionExample {
public static void main(String[] args) {
Set<Integer> setA = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> setB = new HashSet<>(Arrays.asList(3, 4, 5, 6, 7));
评论已关闭