我想知道如何使用 Java Stream API 来展平一个结构,其中我有一个对象和嵌套在其中的相同类型对象的集合。
我的意思是我有一个 Component
具有 List<Component>
类型字段的类。
我想做的是找到一个简洁的流解决方案,与以下代码相同(我需要最终得到所有组件和嵌套子组件的列表)。
List<Component> components = getComponents(id);
List<Component> componentsAndSubcomponents = new ArrayList<>();
for (Component component : components) {
componentsAndSubcomponents.add(component);
componentsAndSubcomponents.addAll(component.getSubComponents());
}
最佳答案
您可以使用flatMap
与 Stream
连接:
List<Component> componentsAndSubcomponents =
components.stream()
.flatMap(c -> Stream.concat(Stream.of(c),c.getSubComponents().stream()))
.collect(Collectors.toList());
这将映射每个 Component
进入Stream
其中包含 Component
接下来是它的所有子组件,并将所有这些 Stream
展平进入公寓Stream<Component>
,收集到 List<Component>
.
关于Java 流 flatMap 将第一级和第二级对象保留在流中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59071751/