lambda - 如何使用lambda过滤具有二级列表中对象属性的列表?

标签 lambda java-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)

黑队 : Kim(4), Jackal(3)

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

过滤器与 4 将得到红色,黑色
过滤器与 11 将得到红色和蓝色。

我知道如何仅在玩家级别进行过滤,例如
players.stream().filter(p->p.number.equal(X))

或 flatmap 以获取玩家列表
teams.stream().flatmap(t->t.getPlayers())

但是我如何混合这些 lambda 来让团队在玩家上有一个属性过滤器?

最佳答案

解决方案可能如下所示:

int playerNumber = ...;
List<Team> filteredTeams = 
    teams
    .stream()
    .filter(
        t -> t.getPlayers().stream().anyMatch(p->p.number==playerNumber)
    )
    .collect(Collectors.toList());

关于lambda - 如何使用lambda过滤具有二级列表中对象属性的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41277862/

相关文章:

c# - 此 WCF 客户端代码会导致内存泄漏吗?

c# - 在不使用iF字的情况下,根据 bool 结果触发函数

c# - .NET Framework 支持空操作语法或单例

java - 必须实现默认接口(interface)方法?

java - Java 8 中流的笛卡尔积作为流(仅使用流)

c# - 表达式不能包含 lambda 表达式 Linq

C++ Lambda 通过引用捕获

java - 在 StringUtils 中返回可选是否过度?

java - 从作为 Map<String,List<Object>> 一部分的 List<Object> 中删除值

Java 8 parallelstream 将返回列表收集到一个列表而不是列表列表中