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