例如,有两个类:
class Team {
List<Player> players; //with getter & setter
}
class Player{
String name; //with getter & setter
int number; //with getter & setter
}
Run Code Online (Sandbox Code Playgroud)
所以,如果有三支球队:
红队:亚当(4)、汤姆(5)、彼得(11)
蓝队:肯(5),贾斯汀(11)
黑队 : Kim(4), Jackal(3)
我想使用 lambda 来获取拥有球衣编号为 X 的成员的团队。例如:
过滤器为 4 将获得红色,黑色
过滤器与 11 将获得红色和蓝色。
我知道如何仅在玩家级别进行过滤,例如
players.stream().filter(p->p.number.equal(X))
Run Code Online (Sandbox Code Playgroud)
或 flatmap 以获取玩家列表
teams.stream().flatmap(t->t.getPlayers())
Run Code Online (Sandbox Code Playgroud)
但是我如何混合这些 lambda 来让团队在玩家上有一个属性过滤器?
Lac*_*lev 10
解决方案可能如下所示:
int playerNumber = ...;
List<Team> filteredTeams =
teams
.stream()
.filter(
t -> t.getPlayers().stream().anyMatch(p->p.number==playerNumber)
)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11506 次 |
| 最近记录: |