You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java 8中如何使用Stream统计数组中长度不超过指定值的字符串数量

关于Java 8 Stream统计符合长度要求字符串的问题

嘿,你的实现完全正确!而且完全不用担心会进行两次遍历——Java Stream的流水线操作是惰性求值+单次遍历的模式,具体来说:

  • 当你调用Arrays.stream(myArray)只是创建了一个流对象,并没有开始遍历数组
  • filter(s -> s.length() <= maxLength)是一个中间操作,同样不会立即执行,只是在流的操作链里添加了一个过滤规则
  • 只有当你调用count()这个终端操作时,整个流的流水线才会启动:数组里的每个元素会被依次取出,经过filter判断,如果符合条件就计入计数,整个过程只遍历数组一次,不会先把符合条件的元素都收集起来再去计数。

你可以把这个过程想象成:你拿着一个计数器,逐个检查数组里的字符串,每遇到长度≤maxLength的就把计数器加1,全程只走一遍数组,和你手动写循环的效率是一致的。

如果想直观验证的话,还可以在filter的lambda里加个打印语句:

int solution = Arrays.stream(myArray)
    .filter(s -> {
        System.out.println("正在检查字符串: " + s);
        return s.length() <= maxLength;
    })
    .count();

运行后会看到每个字符串只会被打印一次,这就直接证明了整个流程只进行了一次遍历。

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

火山引擎 最新活动