如何在Java 8流中过滤内部Set?

时间:2015-01-16 14:52:06

标签: java java-stream

我有对象列表

 List<FrameworkAdminLeftMenu> menu = getMenuFromDB();

每个FrameworkAdminLeftMenu对象都有方法

public Set<FrameworkAdminLeftMenuCategories> getFrameworkAdminLeftMenuCategorieses() {
        return this.frameworkAdminLeftMenuCategorieses;
}

和方法

public String getCssClassName() {
        return this.cssClassName;
}

每个FrameworkAdminLeftMenuCategories对象都有方法

public Integer getId() {
        return this.id;
}

如何按getId(1)过滤所有List和Set以获取FrameworkAdminLeftMenuCategories对象?

例如,像

 List<FrameworkAdminLeftMenu> collect = menu.stream()
                .filter(
                        f -> f
                        .getCssClassName()
                        .contains("adm-content")
                )
                .collect(Collectors.toList());

         List<FrameworkAdminLeftMenuCategories> categs = collect
                .stream()
                .filter(
                        f -> f.
                        getFrameworkAdminLeftMenuCategorieses()
                        .stream()
                        .filter(c -> c.getId() == 1)
                )
                .collect(Collectors.toList());

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,您希望聚合所有集合中的类别并过滤具有正确ID的类别。在这种情况下,您应该使用flatMap

尝试这样的事情(显然未经测试):

 List<FrameworkAdminLeftMenuCategories> categs = menu.stream()
        .filter(f -> f.getCssClassName().contains("adm-content"))
        .flatMap(f -> f.getFrameworkAdminLeftMenuCategorieses().stream())
        .filter(c -> c.getId() == 1)
        .collect(Collectors.toList());