对于每个元素我在每个列表中的操作.元素可以按任何顺序处理.例如在旧的java中:
List<A> aList;
List<B> bList; // aList is larger than bList
for (int i=0; i<bList.size(), i++) {
aList.get(i).doSomethingWith(bList.get(i));
}
for (int j=i; j<aList.size(), j++) {
aList.get(j).doSomething();
}
Run Code Online (Sandbox Code Playgroud)
实现这一点的最佳方法是哪种java.util.stream.Stream元素可以并行处理?
ass*_*ias 17
您需要并行处理这两个列表,因此我认为您不能自己流式传输列表.但是,您可以流式传输索引并对其进行处理:
IntStream.range(0, aList.size())
.parallel()
.forEach(i -> {
if (i < bList.size()) aList.get(i).doSomethingWith(bList.get(i));
else aList.get(i).doSomething();
});
Run Code Online (Sandbox Code Playgroud)
仅仅因为Stream它是新的并不意味着你应该忘记Java提供的所有其他工具.即使使用这些优秀的旧工具,使用Java 8也会变得更加顺畅:
List<A> aList;
List<B> bList; // aList is larger than bList
ExecutorService exec = Executors.newCachedThreadPool();
int a=aList.size(), b=bList.size();
assert a>b;
Future<?> f1=exec.submit(()->IntStream.range(0, b)
.parallel().forEach(i->aList.get(i).doSomethingWith(bList.get(i)))
);
Future<?> f2=exec.submit(()->aList.subList(b, a)
.stream().parallel().forEach(A::doSomething)
);
f1.get();
f2.get();
exec.shutdown();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7167 次 |
| 最近记录: |