问题
For example, there are two classes:
class Team {
List<Player> players; //with getter & setter
}
class Player{
String name; //with getter & setter
int number; //with getter & setter
}
So, if there are three teams:
Red Team : Adam(4), Tom(5), Peter(11)
Blue Team : Ken(5), Justin(11)
Black Team : Kim(4), Jackal(3)
I want to use lambda to get teams which has a member with jersey number X. For example:
filter with 4 will get Red, Black
filter with 11 will get Red and Blue.
I know how to filter only at player level, like
players.stream().filter(p->p.number.equal(X))
or flatmap to get a list of players
teams.stream().flatmap(t->t.getPlayers())
but how to I mix these lambda to get teams with a property filter on player?
回答1:
The solution may look like this:
int playerNumber = ...;
List<Team> filteredTeams =
teams
.stream()
.filter(
t -> t.getPlayers().stream().anyMatch(p->p.number==playerNumber)
)
.collect(Collectors.toList());
来源:https://stackoverflow.com/questions/41277862/how-to-filter-a-list-with-a-property-of-an-object-in-the-second-level-list-using