小编典典

您在这里拥有两个流管道。

这些流管道分别由一个源,几个中间操作和一个终端操作组成。

但是中间操作是懒惰的。这意味着除非下游工序需要物料,否则什么也不会发生。如果这样做,则中间操作将完成它所需的所有操作以产生所需的项目,然后再次等待直到请求另一个项目,依此类推。

终端操作通常是“渴望的”。也就是说,他们要求流中完成它们所需的所有项目。

因此,您应该真正将管道视为forEach向其后面的流询问下一个项目,然后向该流询问其背后的流,依此类推,一直到源。

考虑到这一点,让我们看看您的第一个管道有什么:

Stream.of(1,2,3,4,5,6,7,8,9)

.peek(x->System.out.print("\nA"+x))

.limit(3)

.peek(x->System.out.print("B"+x))

.forEach(x->System.out.print("C"+x));

因此,forEach要求第一项。这意味着“ B” peek需要一个项目,并向limit输出流询问该项目,这意味着limit将需要询问“ A”

peek,该项目将到达源。给定一个项目,一直到forEach,您就得到第一行:

A1B1C1

该forEach请求另一个项目,然后另一个。并且每次,请求都在流中传播并执行。但是当forEach要求第四项时,当请求到达时limit,它知道它已经给出了允许提供的所有项目。

因此,它不要求“ A”偷看另一个项目。它立即表明它的项目已用尽,因此不再执行任何操作并forEach终止。

在第二条管道中会发生什么?

Stream.of(1,2,3,4,5,6,7,8,9)

.peek(x->System.out.print("\nA"+x))

.skip(6)

.peek(x->System.out.print("B"+x))

.forEach(x->System.out.print("C"+x));

再次,forEach要求第一项。这被传播回去。但是当到达时skip,它知道必须先从上游要求6个物料,然后才能通过一个下游物料。因此,它在“

A”上游发出一个请求,在peek不将其传递到下游的情况下使用它,发出另一个请求,依此类推。因此,“

A”窥视得到一个项目的6个请求并产生6个打印,但是这些项目没有传递下来。

A1

A2

A3

A4

A5

A6

在发出的第7个请求中skip,该项目被传递到“ B”窥视,然后从传递给forEach,因此完成了完整打印:

A7B7C7

然后就像以前一样。在skip现在,一旦进入一个请求,要求一个项目的上游和下游传递,因为它“知道”它已经完成了它的跳跃任务。因此,其余的打印件将遍及整个管道,直到用尽为止。

2020-10-07

java limit_Java 8 Stream:limit()和skip()之间的区别相关推荐

  1. java和python的web自动化有什么区别-Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  2. 解析java中方法的重载和重写之间的区别与联系

    解析java中方法的重载和重写之间的区别与联系 1 不同点 1.1 方法重写是在不同的类中(父子类),方法重载是在同一类中 1.2 方法重载最初的目的是构造方法的多样化,方法重写的目的是让重写的方法满 ...

  3. java ordered list_关于并行处理:Java 8的forEachOrdered()和sequence()方法之间的区别?...

    我正在使用Java 8并行流,并且希望以并行流的方式打印元素是某种顺序(例如插入顺序,反向顺序或顺序顺序). 为此,我尝试了以下代码: System.out.println("With fo ...

  4. java executequery_java execute、executeQuery和executeUpdate之间的区别

    在用纯JSP做一个页面报警功能的时候习惯性的用executeQuery来执行SQL语句,结果执行update时就遇到问题,语句能执行,但返回结果出现问题,另外还忽略了executeUpdate的返回值 ...

  5. Java中的frontcolor_关于java:Color.red和Color.RED之间的区别

    setXxx(Color.red)和setXxx(Color.red)的定义之间的真正区别是什么? 我在网上找到了以下解释. 这是关于命名约定的吗? Java originally defined a ...

  6. java switch table_关于java:JVM的LookupSwitch和TableSwitch之间的区别?

    我很难理解Java字节码中的LoopUpwitter和TabLeSwitCH. 如果我理解得很好,LoopUpTwitter和TabLaswitCH都对应于Java源的EDCOX1×0语句吗?为什么一 ...

  7. java allocatedirect_java – ByteBuffer.allocateDirect()和MappedByteBuffer.load()之间的区别

    我试图通过使用MappedByteBuffer对特定文件进行内存映射来实现两个或多个JVM之间的一种共享缓存.从规范我看到当我们使用MappedByteBuffer.load()它应该将数据加载到直接 ...

  8. Java面试-String、StringButtfer和StringBuilder之间的区别

    String     StringBuffer     StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量 ...

  9. java jli.dll_JVM、JRE、JDK之间的区别和联系,你居然还不知道?

    JDK包含了JRE,JRE包含了JVMJDK:java开发工具包,针对java开发人员,可以编译运行java程序 JRE:java运行时环境,针对使用java程序的客户,可以运行字节码(.class) ...

最新文章

  1. oracle sql now函数,postgresql的now()与Oracle的sysdate区别说明
  2. 死脑筋要活用(我只放贴图)01
  3. 默认访问首页 || 国际化||设置全局字符编码的默认设置
  4. 销售凭证中的几个日期
  5. “21天好习惯”第一期-7
  6. 三星+t800+原生android,三星T800(GALAXY Tab S WLAN版)一键救砖教程,轻松刷回官方系统...
  7. 【Aspose for .NET】Aspose.word操作表格:在表格中插入行
  8. 配置Windows静态IP地址
  9. 2018年,数万款小程序暴毙在路上
  10. 台式计算机怎么邮寄,台式机怎么邮寄
  11. 马原期末复习知识点完整版!
  12. 视频问答社区VYou宣布关闭,问答社交模式会走向哪?
  13. mysql的服务被删了怎么办_三、MySQL服务构成、基本操作、误删所有用户后的恢复方法...
  14. 谷歌Cloud、Paly 中的XSS 漏洞可导致账户劫持
  15. 人工智能,机器学习与深度学习,到底是什么关系
  16. 涨价、盈利、IPO?共享充电宝没你想象得好过!
  17. 彻底关闭win11自动更新
  18. 中专学历怎么积分落户北京?
  19. 为PostgreSQL配置work_mem
  20. 242. 有效的字母异位词-Java

热门文章

  1. PHP在Linux上上传文件的注意事项
  2. oracle大数据量迁移,分批量导入样例(fetch...bulk collect)以及forall结合使用
  3. 面试问题记录 (一)
  4. 轮播图的3个常见bug,即处理bug思路及其解决办法
  5. 使用win10 hyper-v安装linux系统
  6. vue样式控制的方式
  7. Ubuntu 14.04 + nginx + php + mysql + phpmyadmin环境搭建,详细操作
  8. 浏览器同源与跨域问题总结
  9. KVM源代码阅读--内核版本3.17.4
  10. OCR基于深度学习下的CNN字符识别