Как Java 8 lamada Stream: получает подмножество атрибутов? - PullRequest
0 голосов
/ 29 мая 2018

Да, есть список заказов Список, который содержит количество товаров в заказе, и теперь хочет получить список заказов, все идентификаторы товаров и структуру модели следующим образом:

class order{
int id,
List<goods> goodsList;
}

class goods{
int id;
String name;
}

List<order> list...

Это дает вам список идентификаторов заказов, и теперь вопрос заключается в том, как получить список коллекций товаров. Идентифицировать все списки заказов.

list.stream ().Map (c->c.getId ()).Collect (Collectors.toList ())

Следующая запись, кажется, неверна

List.stream ().Map (c->c.getGoodsList ().Stream ().Map (q->q.getId ()).Collect (Collectors.toList ());

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Попробуйте,

final List<Good> goods = orders.stream().flatMap(o -> o.getGoodsList().stream()).collect(Collectors.toList());

Если вы хотите получить goodIds, это должно быть что-то вроде этого,

final List<Integer> goodIds = orders.stream().flatMap(o -> o.getGoodsList().stream()).map(Good::getId)
        .collect(Collectors.toList());
0 голосов
/ 29 мая 2018

Теперь вопрос в том, как получить список коллекций товаров по всем заказам в списке.

Вы можете сделать это по flatMap:

List<order> list...
List<Integer> = list.stream()
                    .map(order::getGoodsList)
                    .flatMap(Collection::stream)
                    .map(goods::getId)
                    .collect(Collectors.toList());

Если вам нужен набор уникальных идентификаторов товаров, вы можете заменить toList на toSet.

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