使用Java Streams从列表中解析列表

Rem*_*emo 3 java list java-stream collectors

我有一个产品清单.每种产品都有另一份成分清单.我如何使用Streams来获取所有产品的所有成分列表?

products.stream()
        .map(Product::getIngredients())
        .filter(i -> !i.isEmpty())
        .distinct()
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

就我的代码而言,到目前为止,我只是得到一个包含子列表的列表...

这样做的正确方法是什么?

非常感谢!

Sch*_*uca 6

只需使用flatMap:

products.stream()
        .flatMap(product -> product.getIngredients().stream())
        .distinct()
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • 或者`.map(Product :: getIngredients).flatMap(List :: stream)`. (3认同)
  • @SchiduLuca你需要明确地告诉OP,`distinct`需要重写hashcode/equals ...你不知道它是否是一个选项.否则加一 (2认同)