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

时间:2019-01-15 07:14:38

标签: java collections java-8 mapping java-stream

我在项目中使用JDK8流。

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

Pageable

我不确定如何使用JDK8 Streams遍历对象直到MetaDataItem。我尝试过但对我没有运气

在我的JAXB类中

<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>

2 个答案:

答案 0 :(得分:2)

您要做的就是应用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());

答案 1 :(得分:2)

好像您需要Stream.flatMap。试试这个:

List<MetaDataItem> list= 
    response.getProcessingResult().stream()
            .map(ProcessingResult::getStepResults).flatMap(Collection::stream) 
            .map(StepResult::getDataItms).flatMap(Collection::stream) 
            .map(DataItem::getMetaDataItems).flatMap(Collection::stream) 
            .collect(Collectors.toList());