如何将一个对象的两个字段收集到同一个列表中?

问题描述 投票:0回答:2

我有一个商品对象,它有两个属性:

firstCategoryId
secondCategoryId
。我有一个商品列表,我想获取所有类别 Id(包括 firstCategoryId 和 secondaryCategoryId)。

我目前的解决方案是:

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

是否有更方便的方式可以在一条语句中获取所有类别ID?

java lambda java-8 java-stream
2个回答
37
投票

您可以使用

Stream
:
 通过单个 
flatMap

管道来完成此操作
List<Integer> cats = goodsList.stream()
                              .flatMap(c->Stream.of(c.getFirstCategoryID(),c.getSecondCategoryID()))
                              .collect(Collectors.toList());

0
投票

列出猫 = GoodsList.stream() .flatMap(c->Stream.of(Collections.singleList(c.getFirstCategoryID()),c.getSecondCategoryIDList())).flatMap(stream -> stream.flatMap(Collection::stream)) .collect(Collectors.toList ());

© www.soinside.com 2019 - 2024. All rights reserved.