Java8-如何按列表中的每个元素分组

qxgroojn  于 2021-07-04  发布在  Java
关注(0)|答案(1)|浏览(432)

这个问题在这里已经有答案了

如何从可以属于两个或多个组的列表中对对象进行分组(3个答案)
4个月前关门了。
我有两个列表:“组”和“人”。最后,我想得到一个Map分组的每个'组'。由于上一个flatmap方法,下面的代码无法编译,表示“不能从静态上下文引用非静态方法”。

private static Map<Group, List<Person>> getAllGroupsOfSelectedPeople(List<Person> people) {
       List<Group> groups = getCurrentlyActiveGroups(people);
       return people.stream()
               .filter(p -> CollectionUtils.isNotEmpty(p.getSocials()))
               .filter(p -> p.getGroups().stream().anyMatch(groups::contains))
               .collect(Collectors.groupingBy(p -> p.getGroups().stream().flatMap(List::stream)));
   }
lvjbypge

lvjbypge1#

flatMap 应该在 collect 步骤,生成所有对 Group 以及 Person . 然后你可以把这些对分组。

private static Map<Group, List<Person>> getAllGroupsOfSelectedPeople(List<Person> people) {
       List<Group> groups = getCurrentlyActiveGroups(people);
       return people.stream()
               .filter(p -> CollectionUtils.isNotEmpty(p.getSocials()))
               .filter(p -> p.getGroups().stream().anyMatch(groups::contains))
               .flatMap(p -> p.getGroups()
                              .stream()
                              .map(g -> new SimpleEntry<Group,Person>(g,p)))
               .collect(Collectors.groupingBy(Map.Entry::getKey,
                                              Collectors.mapping(Map.Entry::getValue,
                                                                 Collectors.toList())));
}

相关问题