Java流flatMap中保留有第一级和第二级对象

问题描述 投票:1回答:2

[我想知道如何使用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());
}
java java-stream flatmap
2个回答
2
投票

您可以将flatMapStream串联使用:

List<Component> componentsAndSubcomponents =
    components.stream()
              .flatMap(c -> Stream.concat(Stream.of(c),c.getSubComponents().stream()))
              .collect(Collectors.toList());

[这会将每个Component映射到包含Stream和其所有子组件的Component,并将所有这些Stream展平为展平Stream<Component>,然后收集到[ C0]。


1
投票

一种简单的解决方案是动态创建内部流,如:

List<Component>
© www.soinside.com 2019 - 2024. All rights reserved.