如何使用lambda在第二级列表中过滤具有对象属性的列表? [英] How to filter a list with a property of an object in the second level list using lambda?

查看:125
本文介绍了如何使用lambda在第二级列表中过滤具有对象属性的列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如,有两个类:

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:

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

Red Team : Adam(4), Tom(5), Peter(11)

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

Blue Team : Ken(5), Justin(11)

黑队:金(4),Jack狼(3)

Black Team : Kim(4), Jackal(3)

我想使用lambda来获得拥有球衣号码X的成员的球队. 例如:

I want to use lambda to get teams which has a member with jersey number X. For example:

具有4的过滤器将变为红色,黑色
设置为11的滤镜将获得红色和蓝色.

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())

但是我如何混合使用这些lambda来获得具有属性过滤器的球队呢?

but how to I mix these lambda to get teams with a property filter on player?

推荐答案

解决方案可能如下所示:

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());

这篇关于如何使用lambda在第二级列表中过滤具有对象属性的列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆