java - 使用 JDK8 Stream 如何迭代嵌套对象

标签 java collections java-8 mapping java-stream

我在我的项目中使用 JDK8 流。

我将从第三方应用程序中获取下面提到的 soap xml 响应。根据要求,我必须捕获包含 ExecutionCode 和相应 Value 的 MetaDataItem。

<Response>
    <ProcessingResults>
      <Identifier>identifier-A</Identifier>
      <StepResult>
        <Identifier>device</Identifier>
        <DataItem>
          <Identifier>key</Identifier>
          <MetaData>
            <MetaDataItem>
              <Name>ExecutionCode</Name>
              <Value>0</Value>
            </MetaDataItem>
          </MetaData>
        </DataItem>
      </StepResult>
    </ProcessingResults>
  </Response>

我不确定如何使用 JDK8 Streams 遍历对象直到 MetaDataItem。我试过了,但没有成功

在我的 JAXB 类中

 1. Response class contains "List<ProcessingResults>". 
 2. Each ProcessingResult class contains the "List<StepResults>".
 3. StepResult class contains the "List<DataIteam>".
 4. DataItem class contains the "List<MetaDataItem>".

最佳答案

您所要做的就是应用 flatMap 运算符序列来获得您需要的内容。这是它的样子,

List<MetaDataItem> metaDataItms = response.getProcessingResult().stream()
        .flatMap(pr -> pr.getStepResults().stream())
        .flatMap(sr -> sr.getDataItms().stream())
        .flatMap(ditm -> ditm.getMetaDataItems().stream())
        .collect(Collectors.toList());

关于java - 使用 JDK8 Stream 如何迭代嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54194202/

相关文章:

具有适用于不同平台的 native 库的 Java 项目

java - 在java中检测windows系统区域设置

c# - 非阻塞并发收集?

java - instanceof List 和 instanceof List<?> 的区别

java - new String(byte []) 结果在 JDK 7 和 8 中不同

java - 使用 Java 8 lambda 或流 api 的过滤器列表

java - 从文件返回数组列表

java - 你能避免 Gson 将 "<"和 ">"转换成 unicode 转义序列吗?

Java:声明一叠牌的最佳方式

Java 流 : Add to map but avoid mutation