How to filter a list with a property of an object in the second level list using lambda?

不羁的心 提交于 2020-01-02 07:38:30

问题


For example, there are two classes:

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:

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

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

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

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

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

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


回答1:


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


来源:https://stackoverflow.com/questions/41277862/how-to-filter-a-list-with-a-property-of-an-object-in-the-second-level-list-using

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!