Java Streams和Collector,如何按嵌套集合中的字段分组

Dav*_*ave -2 java java-8 java-stream

我有一个像下面这样的课程:

public class Company {
    private List<Team> teams;
}

public class Team {
    String name;
}
Run Code Online (Sandbox Code Playgroud)

我有这样的Compony对象的列表:

List<Company> companies = ...
Run Code Online (Sandbox Code Playgroud)

团队可以属于并出现在多个公司的列表中。

我正在寻找使用Java流将公司分组为地图的方式,并以团队名称作为地图键。每个地图条目的值是团队所属公司的列表。像这样。

Map<String, List<Company>> companiesGroupedByTeam;
Run Code Online (Sandbox Code Playgroud)

因此,同一家公司可能会出现在不同团队的列表中。

有谁知道如何使用Java流进行分组?努力做小组。

谢谢!

Adr*_*ian 5

就像是:

Map<String, List<Company>> collect = companies.stream()
            .flatMap(c -> c.getTeams().stream()
                     .map(t -> new AbstractMap.SimpleEntry<>(t.getName(), c)))
            .collect(Collectors.groupingBy(Map.Entry::getKey, 
                         Collectors.mapping(Map.Entry::getValue, Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)