我的模型中有以下层次结构:
class Item {
String name;
...
List<SubItem> subItems;
}
class SubItem {
String name;
...
List<String> ids;
}
我想找一个
Item
和它的 SubItem
哪里subItem.ids
列表包含一些特定的 id 并返回 Pair
的 Item.name
和 SubItem.name
.我假设所有名称和 ID 都是唯一的,所以我只对第一个结果感兴趣。我可以使用两个
foreach
来做到这一点循环:for (Item item : items) {
for (SubItem subItem : item.subItems) {
if (subItem.ids.contains("some value")) {
return Pair<String, String>(item.name, subItem.name)
}
}
}
我想知道是否可以使用 Java 8 Streams 获得相同的结果?
我找到了这个答案 How to filter nested objects with Stream ,但我还需要返回一些顶级字段(名称)。
最佳答案
您可以使用 flatMap
:
return items.stream()
.flatMap(i -> i.getSubItems()
.stream()
.filter(si -> si.ids.contains("some value"))
.map(si -> new Pair<String, String>(i.name, si.name)))
.findFirst()
.orElse(null);
关于Java Stream 过滤器嵌套对象返回顶级字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62132222/