Lets say I have a class
public class FootBallTeam {
private String name; // team name
private String league;
//getters, setters, etc.
}
I'm trying to group Teams names according to their League.
For example:
League A -> [nameOfTeam2, nameOfTeam5]
League B -> [nameOfTeam1, nameOfTeam3, nameOfTeam4]
With below code I am getting Map<String, List<FootBallTeam>>
which is pointing to list of team objects List<FootBallTeam>
.
Map<String, List<FootBallTeam>> teamsGroupedByLeague = list
.stream()
.collect(Collectors.groupingBy(FootBallTeam::getLeague));
Instead I just want the names of FootBallTeams i.e. FootBallTeam.name.
In other words Map<String, List<String>>
where List<String>
holds teams names .
How to achieve that?
I just want the names of FootTeams i.e.
FootBallTeam.name
You need to apply additional collector mapping()
as a downstream collector of groupingBy()
Map<String, List<String>> teamNamesByLeague = list.stream()
.collect(Collectors.groupingBy(
FootBallTeam::getLeague,
Collectors.mapping(FootBallTeam::getName,
Collectors.toList())
));