当前位置: 首页 > 知识库问答 >
问题:

了解Java8 Stream的过滤方法

窦夜洛
2023-03-14
IntStream stream = IntStream.range(1, 20);
OptionalInt result = stream.filter(x -> x % 3 == 0)
                               .filter(x -> x % 5 == 0)
                               .findFirst();
OptionalInt result = stream.filter(x -> {System.out.println(x); return x % 3 == 0;})
                           .filter(x -> {System.out.println(x); return x % 5 == 0;})
                           .findFirst();

System.out.println(result.getAsInt());

我希望得到以下内容:1 2 3 4 5 6 7 8 9 10 11 13 14 15 16 17 18 19 20,然后:3 6 9 12 15 18。因为我们首先遍历1到20之间的所有数字,所以只筛选出那些可被3除的数字,然后遍历这个新的并找到那些可被5除的数字。

但相反,我得到了以下输出:1 2 3 3 4 5 6 6 7 8 9 9 10 11 12 12 13 14 15 15 15

它看起来没有检查所有的数字。此外,它看起来只检查x%5==0可被3除的数字。

共有1个答案

贺玉石
2023-03-14

好吧,关于流需要理解的是,与列表不同,它们不(一定)包含所有项,而是一次计算每个项(懒惰的计算)。

这意味着当您执行intstream stream=intstream.range(1,20);时,实际上并没有创建一个包含20项的集合。您创建了一个动态计算的集合。对此流的next的每次调用都将计算下一项。其余的项目仍然“不在那里”(某种意义上说)。

过滤器也一样。

 类似资料:
  • 问题内容: 根据http://www.elastic.co/guide/zh-cn/elasticsearch/guide/master/combining- filters.html 上的elasticsearch文档,布尔过滤器可以是以下内容: 在含义上,它等效于以下逻辑运算: 这样对吗? 谢谢! 问题答案: 正如Andrei在评论中指出的,这是对 过滤器 的正确理解: 可以翻译成 可以翻译成

  • 本文向大家介绍简单了解SpringBoot过滤器及使用方式,包括了简单了解SpringBoot过滤器及使用方式的使用技巧和注意事项,需要的朋友参考一下 过滤器简介 过滤器依赖Servlet容器,属于Servlet规范的一部分。 在实现上基于Servlet容器的函数回调,可以对几乎所有请求进行过滤。 Filter的生命周期由Servlet容器管理。 过滤器执行流程 过滤器配置使用方式一 过滤器配置方

  • 问题内容: 是最新的CSS功能,现代浏览器(至少从2016年7月1日起)尚不可用。 Chrome 51 通过实验性Web平台标志提供支持。 Safari 9.1支持带前缀 Firefox 47不支持 处于这种无法使用的状态,我想知道是否存在任何其他方法来获得相同的结果。 也欢迎针对,,…的JS解决方法 可以通过跟踪的发展 问题答案: 从Chrome M76开始,背景音乐滤镜现已出厂,没有前缀,并且

  • HTML过滤: {dede:trim}<object([^>]*)>([^>]*)</object>{/dede:trim} {dede:trim}<object([^>]*)>{/dede:trim} {dede:trim}</object>{/dede:trim} {dede:trim}<OBJECT([^>]*)>([^>]*)</OBJECT>{/dede:trim} {dede:trim

  • 本文向大家介绍JavaEE Filter敏感词过滤的方法实例详解,包括了JavaEE Filter敏感词过滤的方法实例详解的使用技巧和注意事项,需要的朋友参考一下  我们在聊天的时候的或者留言的时候,有部分词是不允许发表出来。我们可以采用过滤器实现这个功能。 我们只是简单利用过滤器实现这个过滤的功能,有些地方没写的很全 前台代码: Servlet里面的代码: 仅仅只是把从前台收的数据读取出来。看里

  • 问题内容: 尝试了解的使用super()。从外观上看,可以创建两个子类。 我很想知道以下两个子类之间的实际区别。 class Base(object): def init(self): print “Base created” class ChildA(Base): def init(self): Base.init(self) class ChildB(Base): def init(self)