- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
说到Stream
s,当我执行这段代码时
public class Main {
public static void main(String[] args) {
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));
}
}
我得到这个输出
A1B1C1
A2B2C2
A3B3C3
因为将我的流限制为前三个组件会强制操作 A、B 和 C 仅执行 3 次。
尝试使用 skip()
方法对最后三个元素执行类似的计算,会显示不同的行为:this
public class Main {
public static void main(String[] args) {
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));
}
}
输出这个
A1
A2
A3
A4
A5
A6
A7B7C7
A8B8C8
A9B9C9
为什么,在这种情况下, Action A1 到 A6 正在执行?这一定与 limit 是 short-circuiting stateful intermediate operation 的事实有关。 ,虽然 skip 不是,但我不明白这个属性的实际含义。难道只是“skip之前的每一个 Action 都被执行,而limit之前的不是每个 Action 都被执行”?
最佳答案
这里有两个流管道。
这些流管道每个都由一个源、几个中间操作和一个终端操作组成。
但是中间操作是惰性的。这意味着除非下游操作需要项目,否则不会发生任何事情。当它完成时,中间操作会完成它所需要的一切以产生所需的项目,然后再次等待直到请求另一个项目,依此类推。
终端操作通常是“急切的”。也就是说,他们要求流中完成他们需要的所有项目。
因此,您应该真正将管道视为 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”peek 获得 6 个对某个项目的请求并产生 6 个打印,但这些项目不会被传递下去。
A1
A2
A3
A4
A5
A6
在 skip
发出的第 7 次请求中,项目被传递到“B” peek 并从它传递到 forEach
,因此完成了完整的打印:
A7B7C7
然后就像以前一样。 skip
现在将在收到请求时向上游请求一个项目并将其传递到下游,因为它“知道”它已经完成了它的跳过工作。所以剩下的指纹会通过整个管道,直到源头耗尽。
关于Java 8 流 : difference between limit() and skip(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32414088/
我知道这类问题已经得到解答,但就我而言,我已经尝试了所有配置,但仍然不起作用。我需要对我的配置有一个新的看法(我确信我错过了一些东西)。两个附加程序都会记录所有级别 我想将所有包的信息 >= 记录到控
我正在对 Windows 移动设备上的代码性能进行一些基准测试,并注意到某些算法在某些主机上的表现明显更好,而在其他主机上则明显更差。当然,考虑到时钟速度的差异。 供引用的统计数据(所有结果均由同一个
我有一个程序可以计算多边形的面积和周长。程序还会确认面积和周长的计算结果是否与预期结果相同。 我不明白发生了什么,但确认面积和周长是否与预期相同的验证部分无法正常工作。 例如,我现在测试并在所有情况下
Codepen :(对于那些想直接进入的人来说,这是一个代码笔。在 Chrome 和 IE 中尝试一下,看看结果的不同) 我正在尝试使用 css3 转换/过渡,因为它们比 jquery 效果更流畅。
我有几个不同的正则表达式要在给定文本中匹配和替换。 regex1 :如果文本包含单词“Founder”,则将所有文本替换为首席执行官 正则表达式2:如果文本包含9位数字,则将其替换为NUM 我尝试使用
我编写了多线程应用程序,它从每个线程的数据库连接到一些电子邮件帐户。我知道 JavaMail 没有任何选项可以使用 SOCKS5 进行连接,因此我决定通过 System.setProperty 方法使
如您所见,这是我当前 Storyboard的不同设备预览。底部的透明绿色被另一个 View Controller 占用,但需要为每个不同的尺寸类固定间距。我尝试将 Storyboard 中的宽度和高度
我正在创建一个游戏,我需要能够改变玩家 Sprite 的速度。我认为最好的选择是通过重力影响 Sprite 。为了给用户运动的感觉,我希望背景以完全相同的速度向相反的方向移动。 我怎样才能给背景一个不
我正在查看BTrees库并注意到有多个 TreeSet (和其他)类,例如 BTrees.IOBTree.TreeSet BTrees.OOBTree.TreeSet BTrees.LFBTree.T
我有一个小型 C++ 库,必须为 armeabi 和 armeabi7a 编译。我还有一个非常大的 c++ 库,只需要为 armeabi 编译。现在正在为两种架构编译它们(使用 NDK),但这使我的
我需要根据站点的当前部分稍微更改主题。 似乎 MuiThemeProvider 只在加载时设置 muiTheme;但需要在 props 变化时更新。 如何做到这一点? 最佳答案 您可以尝试将主题放在包
如何创建两个每个都有自己的计数器的 lSTListing 环境? 如果我使用例如 \lstnewenvironment{algorithm}[2]{ \renewcommand\lstlist
我想使用 Travis-CI 和 Github 基于分支设置部署。 IE。 - 如果我们从 develop 构建- 然后执行 /deploy.rb使用 DEV 环境主机名,如果 master - 然后
我有一个带有数据验证的 WPF MVVM 数据表单窗口。很多控件都是文本框。目前,数据绑定(bind)触发器设置为默认值,即。 e.失去焦点。这意味着仅在可能完全填写字段时才对其进行验证。所以当删除一
我有许多应用程序的内容页面,并最终为每个内容页面编写了很多 View 模型。例如。如果我有一个包含项目组的列表,我将有一个 ShowAllViewModel并绑定(bind)到内容页面和列表中单个项目
我有一个通用 View 和 4 个其他 View 。我在通用 View 中使用 Bootstrap 选项卡(导航选项卡)。我希望其他 4 个 View 成为通用 View 中 4 个选项卡的内容。由于
我希望针对 Maven 发布插件的不同目标有不同的配置选项。故事是这样的: 我正在将 Git 用于 SCM。我希望release:prepare插件在本地完成所有操作,并让release:perfor
我正在为一个项目使用AbstractTableModel制作一个自定义TableModel,并且我需要找到一种方法让复选框显示在某些行上,而不是其他行上。我已经实现了 getColumn 方法,但我希
摘自《Javascript 忍者的 secret 》一书: EVENTS ARE ASYNCHRONOUS Events, when they happen, can occur at unpredi
我正在尝试配置我的第一个 GWT 记录器,到目前为止,我已经将日志消息打印到我的 JS 控制台(FF 的 Firebug): 最终,我希望非SEVERE 消息转到consoleHa
我是一名优秀的程序员,十分优秀!