Java Stream 过滤器嵌套对象返回顶级字段

标签 java java-stream

我的模型中有以下层次结构:

class Item {
    String name;
    ...
    List<SubItem> subItems;
}

class SubItem {
    String name;
    ...
    List<String> ids;
}

我想找一个 Item和它的 SubItem哪里subItem.ids列表包含一些特定的 id 并返回 PairItem.nameSubItem.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/

相关文章:

java - 如何通过网络发送类

java - 更改 kurento 测试端口

java - 在java中将图像转换为圆柱形

Java Stream - NullPointExeption when filter list

java - 关于如何改进我的实现有什么建议吗?

java - 使用 Autowiring bean 调用实例方法

java - 移动指针 VS。只是迭代字符串

lambda 中使用的 Java 8 流变量应该是最终的或有效的最终

Java 8 嵌套分组

java - 我可以使用 Stream 将一个元素映射到多个元素吗?