Stream API的核心价值是用声明式写法替代传统循环,聚焦结果而非步骤;支持filter过滤、map映射、collect等终端聚合三类操作,链式调用、惰性执行、不修改原集合。

Stream API 的核心价值在于用声明式写法替代传统循环,让代码聚焦“要什么结果”,而不是“怎么一步步算”。过滤、映射、聚合三类操作常组合使用,链式调用清晰自然,且不修改原始集合。
过滤:用 filter 筛出符合条件的元素
filter 接收一个 Predicate(返回 boolean 的函数),只保留满足条件的元素。它属于中间操作,必须配合终端操作才能触发执行。
- 常见写法:用 lambda 表达式直接写判断逻辑,比如
user -> user.getAge() >= 18 - 可链式叠加多个 filter,例如先筛年龄再筛状态:
.filter(u -> u.getAge() > 20).filter(u -> u.isActive()) - 注意 null 安全:若字段可能为 null,建议提前判空或用 Optional 包装,避免 NullPointerException
映射:用 map 转换元素结构
map 将每个元素按规则转换为新类型或新值,也是中间操作。适合做字段提取、格式转换、计算衍生值等。
- 提取字段:如
.map(User::getName)得到姓名字符串列表 - 数值计算:如
.map(n -> n * 2)把数字列表翻倍 - 与 filter 配合常见模式:先 filter 再 map,避免对不相关元素做无谓转换
聚合:用终端操作汇总结果
聚合是流处理的终点,触发整个流水线执行,并返回具体结果。不同需求对应不同终端方法:
- 收集成集合:
.collect(Collectors.toList())、.collect(Collectors.toSet())、.collect(Collectors.groupingBy(User::getDepartment)) - 数值统计:
.count()、.sum()(需 IntStream)、.max(Comparator.naturalOrder()) - 归约计算:
.reduce(0, Integer::sum)求和,或自定义二元操作实现复杂逻辑 - 短路聚合:
.findFirst()、.anyMatch(x -> x > 100),遇到首个匹配即停止,效率更高
实际组合示例
从用户列表中获取所有活跃用户的姓名(大写),并按字母排序后取前3个:
List<string> topActiveNames = users.stream()
.filter(u -> u.isActive())
.map(User::getName)
.map(String::toUpperCase)
.sorted()
.limit(3)
.collect(Collectors.toList());</string>
整个过程没有临时变量、无显式循环、语义直白,且惰性执行——只有 collect 调用时,前面所有操作才真正运行。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











