假设我们有这样一个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));所以,谁能解释一下:
发布于 2014-12-12 17:01:07
他们之间有什么区别?
把它想象成两个嵌套的循环。
第四种情况不清楚,因为实际上只有一个线程池,如果池繁忙,则可以使用当前线程(可能根本不是并行^2)。
哪一个更好?更快?而且更安全?
然而,使用平面地图的第一种方法会更简单。
set.stream().flatMap(s -> s.stream()).forEach(System.out::println);其他版本更复杂,因为控制台是一个共享资源,因为控制台是一个瓶颈,所以多线程版本可能会慢一些。
哪一种适合大型收藏品?
假设您的目标是执行打印以外的其他任务,那么您希望有足够的任务来使您的CPU保持忙碌,但不要有太多的任务造成开销。第二种选择可能值得考虑。
当我们想要对每个项目应用繁重的过程时,哪一个是好的?
同样,如果有少量的外部集合,第二个示例可能是最好的,也可能是第三个示例。
https://stackoverflow.com/questions/27448282
复制相似问题