Java 8并行流并发分组

Java 8并行流并发分组,第1张

Java 8并行流并发分组

您可以使用的

of
静态工厂方法来实现
Collector

Map<String, Set<Person>> groupBy = persons.parallelStream()    .collect(Collector.of(        ConcurrentHashMap::new,        ( map, person ) -> { map.computeIfAbsent(person.name, k -> new HashSet<>()).add(person); map.computeIfAbsent(person.uid, k -> new HashSet<>()).add(person); map.computeIfAbsent(person.phone, k -> new HashSet<>()).add(person);        },        ( a, b ) -> { b.forEach(( key, set ) -> a.computeIfAbsent(key, k -> new HashSet<>()).addAll(set)); return a;        }    ));

正如Holger在评论中所建议的那样,以下方法可能比上述方法更可取:

Map<String, Set<Person>> groupBy = persons.parallelStream()     .collect(HashMap::new, (m, p) -> {          m.computeIfAbsent(p.name, k -> new HashSet<>()).add(p);          m.computeIfAbsent(p.uid, k -> new HashSet<>()).add(p);          m.computeIfAbsent(p.phone, k -> new HashSet<>()).add(p);      }, (a, b) -> b.forEach((key, set) -> {         a.computeIfAbsent(key, k -> new HashSet<>()).addAll(set));     });

它使用的重载

collect
方法的行为与我上面建议的语句相同。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5565506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存