You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Stream API延迟求值疑问:map+count无输出,加filter则有?

Stream中count()触发中间操作的差异原因

先看两段代码的表现:

无打印输出的代码

List.of("a","b","c","D").stream()
    .map(m -> {
        System.out.println(m);
        return m;
    })
    .count();

有打印输出的代码

List.of("a","b","c","D").stream()
    .filter(f -> f.matches("[a-z]"))
    .map(m -> {
        System.out.println(m);
        return m;
    })
    .count();

造成这种差异的核心原因是Java Stream的短路优化机制:

  • 第一个场景里,Stream的源是List,属于「可直接获取元素总数」的Sized流。count()操作在这里不需要执行任何中间操作,直接从源集合拿到元素总数即可,所以map里的打印逻辑完全不会被触发。
  • 第二个场景添加filter后,Stream不再是Sized流——因为filter可能过滤掉部分元素,无法提前知道最终符合条件的元素数量,必须逐个遍历元素执行filter判断,之后才会触发后续的map操作,所以map里的打印就会生效。

内容的提问来源于stack exchange,提问作者Noel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:39:50