如何过滤 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());
我有包含对象的列表
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());