中间操作返回stream、惰性执行、支持链式调用;终止操作返回具体值或void、急切执行、终结链式。peek是中间操作,foreach是终止操作,stream不可重复消费。

区分中间操作和终止操作,关键看三件事:返回类型、是否触发执行、能不能继续链式调用。
看返回类型:Stream 还是非 Stream
中间操作一定返回 Streamfilter、map、sorted、distinct。它们只是“记下要做什么”,不产生结果;
终止操作返回的是具体值或 void,比如 collect() 返回 List 或 Map,count() 返回 long,findFirst() 返回 Optional<t></t>,forEach() 返回 void —— 它一调用,整条流水线才真正跑起来。
看执行时机:惰性还是急切
中间操作是惰性的,只保存逻辑(如一个 Predicate 或 Function),不访问数据源,也不处理任何元素;
终止操作是急切的,它启动整个流水线:从源头开始,逐个元素流经所有中间操作,边处理边传递,最终产出结果或副作用。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
stream.filter(x -> x > 5).map(String::valueOf)执行完,什么都没发生 -
.findFirst()或.anyMatch()遇到满足条件的元素就停(短路) -
.collect(toList())或.count()会遍历全部匹配元素
看链式能力:还能不能接下一个 Stream 方法
中间操作支持无限链式,因为每次返回新 Stream;
终止操作之后不能再接 filter、map 等,编译直接报错 —— 因为它返回的不是 Stream。
- ✅ 合法:
stream.map().filter().collect() - ❌ 错误:
stream.collect().filter()(collect返回List,没有filter方法) - ⚠️ 注意:
forEach()是终止操作,返回void,链式在此断开,且流已被消耗
几个典型易混点
peek() 是中间操作,常被误当成调试用的 forEach —— 它确实能执行副作用,但仍是“记下来”,不接终止操作就不会触发;forEachOrdered() 是终止操作,在并行流中保序;
同一个 Stream 对象重复调用终止操作会抛 IllegalStateException,必须重新获取流(如再调一次 list.stream())。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










