和大多数人一样,我仍然在学习并且喜欢使用新的Java 8 Streams API。我有一个关于流使用的问题,下面提供了一个简化的例子。
Java Streams允许我们将Collection
作为参数,并使用其中的stream()
方法来获得其所有元素的流。在其中,有许多有用的方法,例如filter()
、map()
和forEach()
,它们允许我们对内容使用lambda操作。
我有一段类似如下的代码(简化版):
set.stream().filter(item -> item.qualify())
.map(item -> (Qualifier)item).forEach(item -> item.operate());
set.removeIf(item -> item.qualify());
这个想法是获取符合特定限定条件的集合中所有项目的映射,然后对它们进行操作。操作完成后,它们将不再有任何用途,并应从原始集合中删除。代码运行良好,但我感觉 Stream
中可能有一种操作可以在一行内完成这个任务。
如果有在 Javadocs 中,请指出来,我可能会忽略了。
有没有更熟悉该 API 的人看到类似的操作呢?
removeIf()
中插入改变状态的代码。此外,我的情况适合函数式编程,所以我对流的需求不仅仅是为了将所有内容都压缩到一行中;不过还是谢谢你。 - Michael MacharemoveIf
是完全合法的,并且应该这样使用。修改状态是集合API的一部分,而不是流API的一部分。 - hussachai