java hashset 通过 stream 过滤的核心做法是调用 set.stream() 获取流,使用 filter() 指定条件,最后用 collect(collectors.tocollection(hashset::new)) 将结果收集回新的 hashset。这样做会创建一个包含符合条件元素的新集合,而原集合保持不变。

如何过滤出特定条件的元素
直接回答:要过滤出满足特定逻辑的元素(例如大于某个值的数字),只需在 filter() 中传入对应的 Lambda 表达式即可。

import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Set<integer> original = new HashSet(Arrays.asList(1, 2, 3, 4, 5));
// 过滤出大于 3 的元素
Set<integer> filtered = original.stream()
.filter(n -> n > 3)
.collect(Collectors.toCollection(HashSet::new));
System.out.println("Original: " + original);
System.out.println("Filtered: " + filtered);
}
}</integer></integer>
预期输出:
Original: [1, 2, 3, 4, 5] Filtered: [4, 5]
如何基于另一个集合进行交集过滤
直接回答:如果要保留只在另一个集合中存在的元素(即求交集),可以利用 contains() 方法配合 filter() 实现。

import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Set<string> setA = new HashSet(Arrays.asList("apple", "banana", "cherry"));
Set<string> setB = new HashSet(Arrays.asList("banana", "date", "elderberry"));
// 保留既在 setA 也在 setB 中的元素
Set<string> intersection = setA.stream()
.filter(setB::contains)
.collect(Collectors.toCollection(HashSet::new));
System.out.println("Intersection: " + intersection);
}
}</string></string></string>
预期输出:
Intersection: [banana]
过滤后新集合的哈希码是否与原集合相同
直接回答:过滤后的新 HashSet 的哈希码通常与原集合不同,因为 hashCode() 的计算依赖于集合中元素的数量和内容。即使过滤前后元素看似相似,只要数量或具体对象引用发生变化,哈希码就会改变。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











