Как собрать два поля объекта в один список?

У меня есть объект товаров, который имеет два свойства: firstCategoryId и secondCategoryId. У меня есть список товаров, и я хочу получить все идентификаторы категорий (включая firstCategoryId и secondCategoryId).

Мое текущее решение:

List<Integer> categoryIdList = goodsList.stream().map(g->g.getFirstCategoryId()).collect(toList());
categoryIdList.addAll(goodsList.stream().map(g->g.getSecondCategoryId()).collect(toList()));

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

Ответ 1

Вы можете сделать это с помощью одного конвейера Stream, используя flatMap:

List<Integer> cats = goodsList.stream()
                              .flatMap(c->Stream.of(c.getFirstCategoryID(),c.getSecondCategoryID()))
                              .collect(Collectors.toList());