2
对于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()
的结果,但我没有看到收集单个物品的其他方式。
我在这里看到的另一个问题是,并行线程将继续工作,直到他们完成迭代。如果发现每个工人被发现信号时,我宁愿过早地结束。
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#findAny-- –
@JBNizet谢谢。 – user0000001