现有订单表和订单详情表,怎么用list.stream().map().collect()实现生成订单
时间: 2023-05-24 09:06:19 浏览: 157
JDK8通过Stream 对List,Map操作和互转的实现
5星 · 资源好评率100%
和订单详情集合的订单列表?
假设有两个实体类Order和OrderDetail,分别对应订单和订单详情表,字段如下:
Order
- id (订单id)
- orderNo (订单号)
- createTime (订单创建时间)
OrderDetail
- id (订单详情id)
- orderId (订单id)
- productName (商品名称)
- productPrice (商品价格)
代码实现如下:
```
List<OrderDetail> orderDetails = ...
Map<Long, List<OrderDetail>> orderMap = orderDetails.stream()
.collect(Collectors.groupingBy(OrderDetail::getOrderId));
List<Order> orders = orderMap.entrySet().stream()
.map(e -> {
Order order = new Order();
order.setId(e.getKey());
order.setOrderNo("orderNo_" + e.getKey());
order.setCreateTime(new Date());
order.setOrderDetails(e.getValue());
return order;
}).collect(Collectors.toList());
```
首先,将订单详情按照订单id进行分组,得到一个Map<Long, List<OrderDetail>>,其中Long为订单id。
然后,将Map中的每个Entry转换成一个Order对象,设置订单id、订单号、订单创建时间和对应的订单详情列表,最终得到一个订单列表。
阅读全文