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);