final List<Toy> toys = Arrays.asList("new Toy(1)", "new Toy(2)");
final List<Item> itemList = toys.stream()
.map(toy -> {
return Item.from(toy); //Creates Item type
}).collect(Collectors.toList);
以上编码会对罚款产生罚款,并会从玩具列表中列出一个项目列表。
我想做的是这样的事情:
final List<Item> itemList = toys.stream()
.map(toy -> {
Item item1 = Item.from(toy);
Item item2 = Item.fromOther(toy);
List<Item> newItems = Arrays.asList(item1, item2);
return newItems;
}).collect(Collectors.toList);
OR
final List<Item> itemList = toys.stream()
.map(toy -> {
return Item item1 = Item.from(toy);
return Item item2 = Item.fromOther(toy); //Two returns don't make sense but just want to illustrate the idea.
}).collect(Collectors.toList);
因此,将此与第一个代码进行比较,第一种方法为每个玩具对象返回1个Item对象。
我如何制作它以便为每个玩具返回两个物品对象?
- UPDATE -
final List<Item> itemList = toys.stream()
.map(toy -> {
Item item1 = Item.from(toy);
Item item2 = Item.fromOther(toy);
return Arrays.asList(item1,item2);
}).collect(ArrayList<Item>::new, ArrayList::addAll,ArrayList::addAll);
答案 0 :(得分:4)
你已经这样做了......你只需要flatMap
final List<Item> itemList = toys.stream()
.map(toy -> Arrays.asList(Item.from(toy),Item.fromOther(toy))
.flatMap(List::stream)
.collect(Collectors.toList());
或者您完全按照建议删除映射:
final List<Item> itemList = toys.stream()
.flatMap(toy -> Stream.of(Item.from(toy),Item.fromOther(toy))))
.collect(Collectors.toList());
答案 1 :(得分:1)
如果您希望为每个玩具返回两个项目,输出类型可能应为List<List<Item>>
:
List<List<Item>> itemList =
toys.stream()
.map(toy -> Arrays.asList(Item.from(toy),Item.fromOther(toy)))
.collect(Collectors.toList);
如果您希望将每个Item
的{{1}}个Toy
收集到同一个List<Item>
中,请使用flatMap
:
List<Item> itemList =
toys.stream()
.flatMap(toy -> Stream.of(Item.from(toy),Item.fromOther(toy)))
.collect(Collectors.toList);