使用Java Streams API创建具有父子结构的对象的嵌套集合



我有两个简单的类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 3name字段的格式应该是这样的: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());

最新更新