Использование потока JDK8 как перебирать вложенные объекты - PullRequest
0 голосов
/ 15 января 2019

Я использую потоки JDK8 в своем проекте.

Из стороннего приложения я получу ответ на мыльный XML, упомянутый ниже. В соответствии с требованием я должен захватить MetaDataItem, который содержит ExecutionCode и соответствующее значение.

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

Я не уверен, как я могу пройти объект до MetaDataItem, используя потоки JDK8. Я пытался, но мне не повезло

В моих классах 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>".

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Похоже, вам нужно 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());
0 голосов
/ 15 января 2019

Все, что вам нужно сделать, это применить последовательность операторов 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...