Java8使用大全总结

1. map的使用

String orderSns = mediumSettleListVoList.stream().map(MediumSettleSearch::getSn).distinct().collect(Collectors.joining(","));

2.filter的使用

 List<OrderIODO> orderIODOList = orderIODOS.stream().filter(vo -> {
                return vo.getOrderSn().equals(mediumSettleSearch.getSn());
            }).collect(Collectors.toList());

3.排序

  if (!CollectionUtils.isEmpty(orderIODOList)) {
                orderIODOList.sort(Comparator.comparingLong(OrderIODO::getIoTime));
            }
orderIODOSettleTimeNotNUll.sort(Comparator.comparingLong(OrderIODO::getSettleTime)); //按确认收钱的时间排序

4.统计

Double rangAmount = rangeList.stream().mapToDouble(OrderIODO::getIoAmount).sum();

5.取两个list的差集

  /**
     * 根据id取两个list的差集
     * @param list1
     * @param list2
     * @return
     */
    private List<OrderIODO> getDistinctListById(List<OrderIODO> list1, List<OrderIODO> list2) {
        List<OrderIODO> distinctList = list1.stream()
                .filter(vo->!list2.stream()
                        .map(e->e.getId())
                        .collect(Collectors.toList())
                        .contains(vo.getId())).collect(Collectors.toList());
        return distinctList;
    }

6. 分组统计

  /**
     * 根据支付渠道分组获取支付总额
     *
     * @param orderIODOList
     * @return
     */
    private List<PaymentChannelVO> getPaymentChannelGroup(List<OrderIODO> orderIODOList) {
        List<PaymentChannelVO> paymentChannelVOS = new ArrayList<>();
        
        Map<String, DoubleSummaryStatistics> amountGroupByChannel = orderIODOList.stream().collect(Collectors.groupingBy(OrderIODO::getIoChannel, Collectors.summarizingDouble(OrderIODO::getIoAmount))); //分组统计
        
        for (Map.Entry<String, DoubleSummaryStatistics> entry : amountGroupByChannel.entrySet()) {
            DoubleSummaryStatistics doubleSummaryStatistics = entry.getValue();
            PaymentChannelVO paymentChannelVO = new PaymentChannelVO();
            paymentChannelVO.setChannel(entry.getKey());

            Double amount =  doubleSummaryStatistics.getSum();
            double round = CurrencyUtil.round(amount, 2);
            paymentChannelVO.setNum(round);
            paymentChannelVOS.add(paymentChannelVO);
        }
        return paymentChannelVOS;
    }

第二种分组方式:

/ java8之前。从map中根据key获取value操作可能会有下面的操作
Object key = map.get("key");
if (key == null) {
    key = new Object();
    map.put("key", key);
}

// java8之后。上面的操作可以简化为一行,若key对应的value为空,会将第二个参数的返回值存入并返回
Object key2 = map.computeIfAbsent("key", k -> new Object());
Map<String,Double> map=new HashMap<>();
                    for (OrderIODO orderIODO : list) {
                        Double v = map.computeIfAbsent(orderIODO.getIoChannel(), k -> 0d);
                  //如果orderIODO.getIoChannel() 不存在,就把k -> 0设置成key对应的值并返回
                        v+=orderIODO.getIoAmount();
                        map.put(orderIODO.getIoChannel(),v);  //覆盖原来的值,实现分组统计
                    }

7.拼接字符串

  String orderSnsStr = mediumSettleListVos.stream().map(MediumSettleListVo::getOrderSn).distinct().collect(Collectors.joining(","));
  List<OrderSettleDO> orderSettleDOS = daoSupport.queryForList("select * from ns_order_settle where order_sn in (" + orderSnsStr + ")", OrderSettleDO.class);
  1. 取settletime最大的一条记录
long settleTime = settleIO.stream().mapToLong(OrderIODO::getSettleTime).max().getAsLong();
发布了57 篇原创文章 · 获赞 0 · 访问量 4544

猜你喜欢

转载自blog.csdn.net/Arry_Coding/article/details/104001258