如何使用 Stream API 对集合数据进行声明式的过滤、映射与聚合操作

夏杰同学_2786

夏杰同学_2786

2026-04-27

745人浏览

原创

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

如何使用 stream api 对集合数据进行声明式的过滤、映射与聚合操作

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,避免对不相关元素做无谓转换

聚合:用终端操作汇总结果

聚合是流处理的终点,触发整个流水线执行,并返回具体结果。不同需求对应不同终端方法:

deepstream-dev
deepstream-dev

使用 Python pyservicemaker API 进行 NVIDIA DeepStream SDK 开发。在构建视频分析流水线、基于 GStreamer

下载
  • 收集成集合:.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应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

stream

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

2026.11.12

80

15

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

2026.11.12

60

15

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

2026.11.12

40

15

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

140

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

120

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

120

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

100

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

80

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

100

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CentOS 官方文档
CentOS 官方文档

共0课时 | 0人学习

极客学院Java8新特性视频教程
极客学院Java8新特性视频教程

共17课时 | 4.3万人学习