在Java里StreamAPI常用方法有哪些_Java流式操作入门解析-java教程

Java Stream API要求明确区分中间操作(如filter、map)与终止操作(如collect、forEach),因Stream惰性求值,仅当中间操作后接终止操作才会执行;collect需配合Collectors使用,forEach与peek用途不同,findFirst返回Optional须判空,且同一Stream不可重复使用。

Java 的 Stream API 不是“多学几个方法就行”,而是得先分清哪些操作是中间操作、哪些是终止操作,否则链式调用会出错或不执行。

哪些方法必须成对出现:中间操作 vs 终止操作

Stream 是惰性求值的——只写 filter()、map()、sorted() 这类中间操作,什么都不会发生。必须接一个终止操作(如 collect()、forEach()、count())才会真正触发计算。

  • 常见中间操作:filter()、map()、flatMap()、sorted()、distinct()、limit()、skip()
  • 常见终止操作:collect()、forEach()、reduce()、count()、findFirst()、anyMatch()、allMatch()
  • 错误示例:
    list.stream().filter(x -> x > 0).map(String::valueOf); // 没有终止操作 → 白写

collect() 怎么选下游收集器才不踩坑

collect() 是最常用也最容易写错的终止操作。它不直接返回 List 或 Map,而是依赖 Collectors 工具类提供具体行为。

  • 要转 List:用 Collectors.toList(),不是 new ArrayList()
  • 要转 Set:用 Collectors.toSet(),注意无序且去重
  • 要转 Map:必须指定 key 和 value,且 key 不能重复,否则抛 IllegalStateException
  • 安全写法(避免 key 冲突):
    Map map = list.stream()
        .collect(Collectors.toMap(
            Person::getId,
            Person::getName,
            (v1, v2) -> v1 // 冲突时保留第一个
        ));

forEach() 和 peek() 看似相似,用途完全不同

forEach() 是终止操作,用于消费流元素;peek() 是中间操作,仅用于调试或副作用,但不能替代 forEach()。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 在Java里StreamAPI常用方法有哪些_Java流式操作入门解析-java教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4005177+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4005177+
  • 本周更新: 0+
  • 最后更新: 2026-03-16