就像几乎所有人一样,我仍然在学习新的Java 8 Streams API的复杂性(并且非常喜欢它们).我有一个关于流的使用的问题.我将提供一个简化的例子.
Java Streams允许我们使用a Collection
,并使用stream()
它上面的方法来接收所有元素的流.在这,有许多有用的方法,比如filter()
,map()
和forEach()
,这让我们对内容的使用拉姆达操作.
我的代码看起来像这样(简化):
set.stream().filter(item -> item.qualify())
.map(item -> (Qualifier)item).forEach(item -> item.operate());
set.removeIf(item -> item.qualify());
Run Code Online (Sandbox Code Playgroud)
我们的想法是获取集合中所有项目的映射,这些项目匹配某个限定符,然后通过它们进行操作.操作后,它们不再用于其他目的,应从原始组中移除.代码运作良好,但我无法摆脱这样的感觉,即有一个操作Stream
可以在一行中为我做这件事.
如果它在Javadocs中,我可能会忽略它.
是否有人更熟悉API会看到类似的东西?
老实说,除了相邻的代码行之外,我还不确定这是否可行.但是,我想我会和社区核实一下.
Java 8允许通过Stream API管理其集合.我们以前需要外部迭代的地方,现在我们可以简单地使用:
<Collection>.stream().forEach([expression]);
Run Code Online (Sandbox Code Playgroud)
当我尝试快速格式化大型集合时,这很好,比如,将它输出到BufferedOutputStream或其他目标.我需要做的是在我旁边写一些关于我正在写的内容的信息.到目前为止,我能想到的最好的是:
labelData();
firstNames.stream().sequential().forEach(sz -> reportData(sz));
Run Code Online (Sandbox Code Playgroud)
然而,如果我可以这样的话,那将是非常好的:
firstNames.stream().sequential().
.onOpen(labelData())
.forEach(sz->reportData(sz));
Run Code Online (Sandbox Code Playgroud)
我知道可以使用BaseStream.onClose(Runnable closeHandler)设置一个on-close方法.这种方法是否存在开放?
谢谢你的时间.