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

How to filter inner Set in Java 8 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) 筛选所有列表和集合以获取 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());

如果我对问题的理解正确,你想聚合所有集合中的类别并过滤具有正确 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());