例如,有两个类:
class Team {
List<Player> players; //with getter & setter
}
class Player{
String name; //with getter & setter
int number; //with getter & setter
}
所以,如果有三支球队:
红队:亚当(4),汤姆(5),彼得(11)
Blue Team:Ken(5),Justin(11)
Black Team:Kim(4),Jackal(3)
我想使用lambda来获得拥有球衣编号为X的成员的球队。 例如:
过滤器4将获得红色,黑色
过滤器11将获得红色和蓝色。
我知道如何仅在玩家级别过滤,例如
players.stream().filter(p->p.number.equal(X))
或flatmap获取玩家列表
teams.stream().flatmap(t->t.getPlayers())
但是我如何混合使用这些lambda来获得在玩家身上使用属性过滤器的团队?
答案 0 :(得分:4)
解决方案可能如下所示:
int playerNumber = ...;
List<Team> filteredTeams =
teams
.stream()
.filter(
t -> t.getPlayers().stream().anyMatch(p->p.number==playerNumber)
)
.collect(Collectors.toList());