Java 8 лямбда для каждого метода вызова и addAll - PullRequest
0 голосов
/ 30 апреля 2018

Я хотел бы заменить следующий код для использования потоков Java 8, если это возможно:

final List<Long> myIds = new ArrayList<>();
List<Obj> myObjects = new ArrayList<>();
// myObject populated...

for (final Obj ob : myObjects) {
   myIds.addAll(daoClass.findItemsById(ob.getId()));
}

daoClass.findItemsById возврат List<Long>

Кто-нибудь может посоветовать лучший способ сделать это через лямбды? Большое спасибо.

Ответы [ 3 ]

0 голосов
/ 30 апреля 2018

Используйте flatMap, который объединяет несколько списков в один список.

myObjects.stream()
    .flatMap(ob -> daoClass.findItemsById(ob.getId()).stream())
    .collect(Collectors.toList());
0 голосов
/ 30 апреля 2018

FlatMap это!

source.stream()
      .flatMap(e -> daoClass.findItemsById(e.getId).stream())     
      .collect(Collectors.toCollection(ArrayList::new));
0 голосов
/ 30 апреля 2018
List<Long> myIds = myObjects.stream()
    .map(Obj::getId)
    .map(daoClass::findItemsById)
    .flatMap(Collection::stream)
    .collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...