Соберите списки, чтобы объединить список, используя потоки - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь написать выражение, которое берет данные из кешей (они возвращают список) и собирает все вместе.

Я придумал:

List<myDto> myJointSnapshot = cachesMap.values().stream()
  .flatMap(c->c.getSnapshot()).collect(Collectors.toList());

, где getSnapshot возвращает такжеList .

Это дает мне ошибку: не существует экземпляра (ов) переменной типа (типов) R, так что List соответствует Stream <?extends R>

Как я могу исправить выражение, чтобы оно было допустимым?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Чтобы лучше понять, вы можете разделить на 2 шага

// Lambda
List<myDto> myJointSnapshot = cachesMap.values().stream()
                                                .map(c -> c.getSnapShot())
                                                .flatMap(l->l.stream())
                                                .collect(Collectors.toList());

// Method reference
List<myDto> myJointSnapshot = cachesMap.values().stream()
                                                .map(Caches::getSnapshot) // replace 'Caches' by real type
                                                .flatMap(List::stream)
                                                .collect(Collectors.toList());
0 голосов
/ 23 октября 2018
flatMap(c->c.getSnapshot().stream())...

flatMap ожидает в результате Stream, в вашем случае это List.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...