gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:52:11 24 4
gpt4 key购买 nike

和几乎所有人一样,我仍在学习新的 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 的人看到类似的东西?

最佳答案

你可以这样做:

set.removeIf(item -> {
if (!item.qualify())
return false;
item.operate();
return true;
});

如果 item.operate() 总是返回 true 你可以非常简洁地做到这一点。

set.removeIf(item -> item.qualify() && item.operate());

但是,我不喜欢这些方法,因为目前尚不清楚发生了什么。就个人而言,我会继续为此使用 for 循环和 Iterator

for (Iterator<Item> i = set.iterator(); i.hasNext();) {
Item item = i.next();
if (item.qualify()) {
item.operate();
i.remove();
}
}

关于java - Java 8 Streams 可以对集合中的项目进行操作,然后将其删除吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30041206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com