小编Mic*_*lin的帖子

Java 8 Streams可以对集合中的项目进行操作,然后将其删除吗?

就像几乎所有人一样,我仍然在学习新的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 collections filtering java-8 java-stream

67
推荐指数
1
解决办法
8万
查看次数

在任何其他中间方法之前,如何在打开Java 8流时运行单个函数?

老实说,除了相邻的代码行之外,我还不确定这是否可行.但是,我想我会和社区核实一下.

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方法.这种方法是否存在开放?

谢谢你的时间.

java handler java-8 java-stream

1
推荐指数
1
解决办法
177
查看次数

标签 统计

java ×2

java-8 ×2

java-stream ×2

collections ×1

filtering ×1

handler ×1