如何使用lambda表达式根据第二级列表中对象的属性过滤列表?

8
例如,有两个类:
class Team { 
 List<Player> players; //with getter & setter
}
class Player{
  String name; //with getter & setter
  int number;  //with getter & setter
}

所以,如果有三个团队:

红队:亚当(4),汤姆(5),彼得(11)

蓝队:肯(5),贾斯汀(11)

黑队:金(4),杰卡尔(3)

我想使用lambda获取拥有球衣号码X的成员的团队。例如:

筛选4将获取红队和黑队。
筛选11将获取红队和蓝队。

我知道如何仅在球员级别进行筛选,比如:

players.stream().filter(p->p.number.equal(X))

或者使用 flatmap 获取玩家列表

teams.stream().flatmap(t->t.getPlayers())

但是我如何混合这些Lambda表达式以获得带有玩家属性过滤器的团队?
1个回答

12
解决方案可能如下所示:
int playerNumber = ...;
List<Team> filteredTeams = 
    teams
    .stream()
    .filter(
        t -> t.getPlayers().stream().anyMatch(p->p.number==playerNumber)
    )
    .collect(Collectors.toList());

1
是的,以那种方式理解似乎很容易:-) 但是当然 - 随意重新格式化它,使其看起来最容易理解。 - Lachezar Balev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接