Java поток: Collect Stream к списку - PullRequest
0 голосов
/ 21 марта 2020

Я пытаюсь разобраться с java потоками.

Atm У меня есть эта конструкция, которая не работает:

List<int[]> whiteLists = processes.stream()
              .map(Process::getEventList)
              .forEach(eventList -> eventList.stream()
                      .map(event -> event.getPropertie("whitelist"))
                      .map(propertie -> propertie.getIntArray())
                      .collect(Collectors.toList()));
}

Иерархия:

  • Процесс
    • Событие
      • Свойство

Process :: getEventList возвращает список Event объектов

event.getPropertie("whitelist") возвращает Property объектов, которые имеют метод getIntArray()

event.getPropertie() дает мне int-массив.


Как собрать этот массив в список массивов?

Спасибо!


1 Ответ

1 голос
/ 21 марта 2020

Вы не можете использовать forEach(), так как он принимает Consumer, то есть он будет потреблять поток, но не может ничего возвратить (так что нечего собирать).

Вам нужно flatMap для потоковой передачи внутреннего eventList следующим образом

List<int[]> whiteLists = processes.stream()
                                  .flatMap(p -> p.getEventList().stream())
                                  .map(event -> event.getPropertie("whitelist"))
                                  .map(propertie -> propertie.getIntArray())
                                  .collect(Collectors.toList());
...