给定以下实体:
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
作为参数。您正在尝试传递一个返回 List
的 Function
。改用这个:
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/