您可以使用的
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方法的行为与我上面建议的语句相同。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)