假设我们有一个Collection
这样的:
Set<Set<Integer>> set = Collections.newSetFromMap(new ConcurrentHashMap<>());
for (int i = 0; i < 10; i++) {
Set<Integer> subSet = Collections.newSetFromMap(new ConcurrentHashMap<>());
subSet.add(1 + (i * 5));
subSet.add(2 + (i * 5));
subSet.add(3 + (i * 5));
subSet.add(4 + (i * 5));
subSet.add(5 + (i * 5));
set.add(subSet);
}
并进行处理:
set.stream().forEach(subSet -> subSet.stream().forEach(System.out::println));
要么
set.parallelStream().forEach(subSet -> subSet.stream().forEach(System.out::println));
要么
set.stream().forEach(subSet -> subSet.parallelStream().forEach(System.out::println));
要么
set.parallelStream().forEach(subSet -> subSet.parallelStream().forEach(System.out::println));
所以,有人可以向我解释一下:
它们之间有什么区别?
可以将其视为两个嵌套循环。
第四种情况尚不清楚,因为实际上只有一个线程池,并且如果该池繁忙,则可以使用当前线程,即它可能根本不是并行的^ 2。
哪一个更好?快点?更安全?
第一个,但是使用平面地图会更简单。
set.stream().flatMap(s -> s.stream()).forEach(System.out::println);
其他版本则更为复杂,并且由于作为瓶颈的控制台是共享资源,因此多线程版本可能会比较慢。
哪一个适合大量收藏?
假设您的目标是执行打印以外的操作,那么您想要执行足够的任务以使所有CPU保持忙碌,但是没有那么多任务会产生开销。第二种选择可能值得考虑。
当我们想对每个项目进行繁重的处理时,哪一个是好的?
同样,第二个示例可能是最好的,如果外部集合的数量很少,则可能是第三个示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句