Java 8过滤列表中的列表

Tri*_*Man -1 java lambda

我有一个包含对象列表的对象列表,我想获得容器中的一个项目.这可能与lambda有关,还是只需要为循环嵌套?

这是我用于查找项目的当前方法:

for (Container c : containers) {
    for (Item i : c.getItems() {
        if (i.getKey().equals(key)) return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

mar*_*ran 6

嵌套的for循环效果很好.如果您想使用流来执行此操作,则可以执行以下操作:

containers.stream()
          .flatMap(c -> c.getItems().stream())
          .filter(i -> i.getKey().equals(key))
          .findFirst();
Run Code Online (Sandbox Code Playgroud)

这将返回Optional包含Itemif的内容,否则为空Optional.