Java的lambda表达式应用

发布于:2025-06-24 ⋅ 阅读:(16) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到