Lambda表达式是Java 8引入的一项强大特性,它允许以更加简洁的方式表示匿名函数。Lambda表达式不仅让代码更加简洁、清晰,而且为函数式编程提供了有力支持,从而提升了Java语言的表达能力。
本文主要讲解lambda应用stream处理集合的应用。
1、基础应用
stream流的基础应用是对集合的过滤、对象转换、类型转换等。
//集合过滤后转换存储对象iPage.getRecords().stream()//根据状态过滤集合.filter(item -> item.getStatus() == 2)//集合对象转换.map(item -> {OrderVo vo = new OrderVo();BeanUtils.copyProperties(item, vo);vo.setStatusStr(OrderStatusEnum.descByCode(item.getStatus()));return vo;}).collect(Collectors.toList());//集合转换为订单号为key的map对象iPage.getRecords().stream().collect(Collectors.toMap(OrderPo::getOrderNo, item->item));//获取集合订单号集合iPage.getRecords().stream().map(item->item.getOrderNo()).collect(Collectors.toSet());
其他功能的用法如下
//获取第一个对象OrderPo record = iPage.getRecords().stream().findFirst().get();//随机获取一个对象record = iPage.getRecords().stream().findAny().get();//获取订单金额最大的对象record = iPage.getRecords().stream().max((a,b)-> a.getOrderAmount().compareTo(b.getOrderAmount())>0? 1:-1).get();//统计数量long count = iPage.getRecords().stream().count();//排序List<OrderPo> list = iPage.getRecords().stream().sorted((a,b)-> a.getOrderAmount().compareTo(b.getOrderAmount())>0? 1:-1).collect(Collectors.toList());
2、分组统计功能
//按订单状态分组统计
Map<Integer, List<OrderPo>> map = iPage.getRecords().stream().collect(Collectors.groupingBy(OrderPo::getStatus));
3、reduce使用
//汇总订单金额
BigDecimal amount = iPage.getRecords().stream().map(OrderPo::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add);//
BigDecimal amount = iPage.getRecords().stream().map(OrderPo::getOrderAmount).reduce((sum, x) -> sum.add(x)).get();//汇总订单数量
Integer q = iPage.getRecords().stream().map(OrderPo::getQuantity).reduce(0, Integer::sum);