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