Java并行流:如何等待线程完成并行流?
因此,我有一个列表,从中获取并行流以填写地图,如下所示:
Map<Integer, TreeNode> map = new HashMap<>();
List<NodeData> list = some_filled_list;
//Putting data from the list into the map
list.parallelStream().forEach(d -> {
TreeNode node = new TreeNode(d);
map.put(node.getId(), node);
});
//print out map
map.entrySet().stream().forEach(entry -> {
System.out.println("Processing node with ID = " + entry.getValue().getId());
});
此代码的问题在于,当“放置数据”过程仍在进行时,地图正在打印出来(cuz它是并行的),因此,map尚未收到列表中的所有元素。当然,在我的真实代码中,它不仅仅是打印出地图;我使用地图来利用O(1)查找时间。
我的问题是:
如何让主线程等待,以便在地图打印出来之前完成“放置数据”?我试图将“放置数据”放在线程t中,并执行和,但这无济于事。
t.start()
t.join()
也许在这种情况下我不应该使用并行流?这个列表很长,我只想利用并行性来提高效率。