我在项目中使用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());

10-06 08:01