代码之家  ›  专栏  ›  技术社区  ›  pawello2222

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

  •  1
  • pawello2222  · 技术社区  · 5 年前

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

    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 ,但我需要还一些 顶层 字段( 姓名 )也是。

    1 回复  |  直到 5 年前
        1
  •  8
  •   Eran    5 年前

    您可以使用 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);