java - 如何展平包含列表的对象列表并将每个元素传递到方法中?

标签 java java-stream

给定以下实体:

public class Parent extends {
    private Long id;    
    private List<Child> children = new ArrayList<>();
}

我正在尝试学习如何使用 Java 8 Stream API 来展平 List<Parent> ,每个包含 List<Child>并传递 Child 的流进入 void 方法。

例如:

List<Parent> parents = //..

schedules.stream()
        .flatMap(Parent::getChildren)
        .forEach(this::invoke);

这给出了错误:

Bad return type in method reference: cannot convert java.util.List< Child > to java.util.stream.Stream < ? extends R >

最佳答案

Stream.flatMap()需要一个Function,它返回一个Stream作为参数。您正在尝试传递一个返回 ListFunction 。改用这个:

List<Parent> parents = ...;
parents.stream()
        .flatMap(p -> p.getChildren().stream())
        .forEach(this::invoke);

或者,您可以使用Stream.map()Stream.flatMap():

parents.stream()
        .map(Parent::getChildren)
        .flatMap(Collection::stream)
        .forEach(this::invoke);

关于java - 如何展平包含列表的对象列表并将每个元素传递到方法中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942365/

相关文章:

java - 优化java中的嵌套for循环

javascript - 如何从浏览器FETCH触发浏览器下载?

java - 如何在流分组或分区时忽略对象?

java - 我可以结合java8(流,lambda)和 Guava 吗?

java - 如何使用 Java 8 流将列表元素映射到它们的索引?

java - 将 Base64 编码的 md5 转换为可读字符串

java - 存储库设计模式——每个 Dao 都应该有一个存储库吗?

java - PrintWriter输出乱码

java - 字符串列表未并行运行 - Java 8 并行流

java - 使用 Java 8 将一种类型的列表转换为另一种类型的数组