gpt4 book ai didi

java - 使用并行流在集合中查找单个对象

转载 作者:行者123 更新时间:2023-12-03 12:59:30 25 4
gpt4 key购买 nike

对于Java流而言,它并不是一个新事物,但仍然可以捕获它。我已经看到了一些示例,但是似乎没有一个适合我的用例。

我有一个可以成倍增长的对象列表,我想并行化用于在此列表中找到单个项目的循环。

这是我目前拥有的:

for (Node node : itemList)
{
if (node.itemData().dataId() == searchData.itemData().dataId())
return node;
}

return null;

这是我尝试此循环的并发版本
List<Node> nodeItem = itemList.parallelStream()
.filter(item -> item.itemData().dataId() == searchData.itemData().dataId())
.collect(Collectors.toList());

return (!nodeItem.isEmpty() ? nodeItem.get(0) : null);

我在这里看到两个问题。第一个是我将这个单一条目放入 List中。我知道这是 collect()的结果,但是我看不到任何其他收集单个项目的方法。

我在这里看到的另一个问题是并行线程将继续处理列表中的它们的部分,直到完成迭代为止。如果希望发现每个 worker 时,都要求他们提前结束信号,我希望能这样做。

最佳答案

如JB所述,您可以使用Stream#findAny,这是一个终端操作,它将返回您要查找的元素的Optional

return itemList.parallelStream()
.filter(item -> item.itemData().dataId() == searchData.itemData().dataId())
.findAny()
.orElse(null);

关于java - 使用并行流在集合中查找单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44931322/

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