【发布时间】:2015-06-03 17:53:31
【问题描述】:
我有一段这样的代码:
List<Egg> eggs = hens.parallelStream().map(hen -> {
ArrayList<Egg> eggs = new ArrayList<>();
while (hen.hasEgg()) {
eggs.add(hen.getEgg());
}
return eggs;
}).flatMap(Collection::stream).collect(Collectors.toList());
但是通过这种方式,我必须为每只母鸡创建一个 ArrayList,并且在母鸡 100% 处理之前不会收集鸡蛋。我想要这样的东西:
List<Egg> eggs = hens.parallelStream().map(hen -> {
while (hen.hasEgg()) {
yield return hen.getEgg();
}
}).collect(Collectors.toList());
但是Java没有yield return。有没有办法实现它?
【问题讨论】:
-
您应该添加您的
Hen类定义。另外,您具体要完成什么?您是否希望在继续收集鸡蛋时可以开始处理部分结果(如在部分填充的List<Egg>中)?或者您只是想收集所有母鸡的所有鸡蛋,而在收集之前必须完成所有母鸡的处理这一事实不是问题? -
在这种情况下,我只是收集所有鸡蛋。但是,如果我们最终使用 .processEggs() 而不是 .collect() ,看看我们能做些什么会很好。
标签: java parallel-processing java-8 java-stream