一、List集合转Map集合,按uid进行分组,并且统计 每个用户的订单总数
1、案例统计昨天 每个用户回收盲盒的数量(回收一个盲盒子算一个订单)
String day = DateUtil.getDate(-1);
LambdaQueryWrapper<BlindboxOrder> lqw = new LambdaQueryWrapper<>();
lqw.eq(BlindboxOrder::getDealType, 2);//回收
lqw.eq(BlindboxOrder::getStatus, 6);//已回收
lqw.eq(BlindboxOrder::getPaid, 1);//已支付
lqw.eq(BlindboxOrder::getGoodsPrice, BlindBoxConstants.PRICE_518);
lqw.likeRight(BlindboxOrder::getRecoveryTime, day);
List<BlindboxOrder> blindboxOrders = blindboxOrderDao.selectList(lqw);
Map<Integer, Long> userIdBlindNumber = blindboxOrders
.stream().map(BlindboxOrder::getUid).collect(Collectors.toList())
.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()));
二、对盲盒订单,通过用户Id进行分组
1、例如 List<对象> 转 Map<uid,List<对象>>
//1、查询昨日每个人uid 共回收了多少单
String date = DateUtil.getDate(-1);
LambdaQueryWrapper<BlindboxOrder> lqw=new LambdaQueryWrapper<>();
lqw.eq(BlindboxOrder::getPaid,1);
lqw.eq(BlindboxOrder::getDealType,2);
lqw.likeRight(BlindboxOrder::getRecoveryTime,date);
List<BlindboxOrder> blindboxOrders = blindboxOrderDao.selectList(lqw);
// 如果前一天没有需要结算的直接返回
if (!(blindboxOrders!=null&&blindboxOrders.size()>0)) return;
//按用户uid 进行分组
Map<Integer, List<BlindboxOrder>> userPushs = blindboxOrders.stream().collect(Collectors.groupingBy(BlindboxOrder::getUid));