我有两个简单的类Order和Item。每个订单都包含项目列表。如何使用Java Streams创建订单列表?
订单:
public Order(String name, int id, ArrayList<Item> items) {
super();
this.name = name;
this.id = id;
this.items = items;
}
项目
public Item(String name, int id, double price, boolean active) {
super();
this.name = name;
this.id = id;
this.price = price;
this.active = active;
}
name
字段的格式应该是这样的:Order 3
。name
字段的格式应该是这样的:Item 4 of Order 3
这是我拙劣的尝试:
ArrayList<Order> or = IntStream.rangeClosed(1,NUMBER_OF_ORDERS).boxed()
.map(idOrder ->
new Order("Orderd " + idOrder.toString(), idOrder,
IntStream.rangeClosed(1,NUMBER_OF_ITEMS_PER_ORDER).boxed()
.map(idItem -> new Item("Item " + idItem, idItem, 100,
true))
.collect(Collectors .toCollection(ArrayList::new)))
.collect(Collectors.toCollection(ArrayList::new))));
我犯了一个错误。我的想法是调用Stream来代替Order构造函数中的第三个参数,以返回ArrayList of Items,然后再次将所有Order对象包装在列表中,但这并不顺利。。。
我想我明白了。我刚刚在适当的地方设置了collect
。但如果有人有更好的想法,把它张贴在这里会很好。干杯
List<Order> or = IntStream.rangeClosed(1, NUMBER_OF_ORDERS).boxed()
.map(idOrder ->
new Order("Orderd " + idOrder, idOrder,
IntStream.rangeClosed(1, NUMBER_OF_ITEMS_PER_ORDER)
.mapToObj(idItem -> new Item("Item " + idItem + " of Order " + idOrder, 100, true))
.collect(Collectors.toCollection(ArrayList::new)))
).collect(Collectors.toList());