首页 > 解决方案 > 不知道为什么这个 stream() 不能在这个嵌套列表上工作?

问题描述

我有两个嵌套列表类型,如下所示:

    List<Team> team;
    
    public class Team{
        private String teamId;
        private List<TeamUsers> teamUsers;
        --getter setter...
    }

    
    public class TeamUsers{
        private int TeamUsersId;
        private int active;
        --getter setter...

    }

我想返回所有列表,并且在每个 Team 对象内部,如果 TeamUsers 对象 active = 0,则不要在嵌套列表中返回此 TeamUsers 对象。这是我的代码:

List<Team> alldata = (List<Team>) teamRepo.findAll();
List<Team> finalResult = alldata.stream()
                .filter(a -> a.getTeam_users().stream().allMatch(b -> b.getActive() == 1)).collect(Collectors.toList());

它只返回给我所有 TeamUsers.active = 1 的第一个团队。

在第二个团队中,我确实有一些 TeamUsers.active = 1 和一些 TeamUsers.active = 0。

我犯了什么错误?

标签: javajava-stream

解决方案


您要修改用户列表:

List<Team> alldata = (List<Team>) teamRepo.findAll();

List<Team> finalResult = alldata.stream()
        .map(t -> new Team(t.getTeamId(),
                           t.getTeamUsers().stream()
                                   .filter(u -> u.getActive() == 1)
                                   .collect(Collectors.toList())))
        .filter(t -> t.getTeamUsers().size() != 0)
        .collect(Collectors.toList());

推荐阅读