从VMware Workstation到vCenter——Web服务器跨平台迁移全路径(含Apache→Nginx无缝切换实录)
2026/6/26 8:19:11
在Java Stream中,**过滤(filter)*的作用就是*排除不满足条件的元素,只保留你感兴趣的部分。
它接收一个Predicate(返回true或false的布尔函数),来判断每个元素是否应该保留。
List<String>strings=List.of("one","two","three","four");longcount=strings.stream().map(String::length).filter(length->length==3).count();System.out.println("count = "+count);📌 输出:
count=2🎯 说明:
map(String::length):将字符串映射为它们的长度filter(length -> length == 3):只保留长度为 3 的值count():统计最终保留下来的元素个数,是一个终端操作📢count()返回的是long类型 —— 比int更大,因此可以统计极大量的元素,比 ArrayList 所能存储的数量还多!
你也可以不使用map(),而是直接在字符串上使用filter():
List<String>strings=List.of("one","two","three","four");List<String>filtered=strings.stream().filter(s->s.length()==3).toList();System.out.println("filtered = "+filtered);📌 输出:
filtered=[one,two]💡 你可以看到,这种写法更直观,因为我们直接在原始元素(字符串)上应用判断逻辑。
也就是说,它不仅支持Stream<T>,还支持:
IntStreamLongStreamDoubleStream✅ 示例:过滤整数列表中大于 10 的数字
List<Integer>numbers=List.of(5,8,13,21,3);List<Integer>result=numbers.stream().filter(n->n>10).toList();System.out.println("result = "+result);输出:
result=[13,21]| 场景 | 推荐操作 |
|---|---|
| 保留满足条件的元素 | 使用filter(predicate) |
| 想要直接数数量 | 接.count()(返回 long) |
| 需要获得新集合 | 接.toList()、.toSet()等 |
| 想对数值进行统计或运算 | 推荐结合mapToInt()等一起使用 |
filter()是一个中间操作,返回的是一个新流(并不立即执行)true的元素.count()可以快速统计满足条件的元素数量filter()中写带副作用的代码问题 1:以下代码输出什么?
List<String>data=List.of("apple","bat","cat","dog","elephant");longcount=data.stream().filter(s->s.length()<=3).count();System.out.println(count);答案:3("bat", "cat", "dog")