• Stream流、函数式接口(Lambda)、链式编程


    Lambda表达式

    Lambda表达式就是对函数式接口抽象方法的实现,是对其匿名内部类的一个简写,只保留了方法的参数列表和方法体,其他的成分可以省略。
    三部分组成:

    • 参数列表
    • 箭头
    • 方法体

    (参数列表)->{方法体}

    链式编程

    链式编程,也叫级联式编程,调用对象的函数时返回一个this对象指向对象本身,达到链式效果,可以级联调用。

    通俗的说是通过点号(.)链接在一起成为一句代码。

    Stream方法map()

    // 将订单详情对象转换为购物车对象
            List<String> res = list.stream().map(x -> {
                //方法体(对数据操作,例如数据拷贝,,)
                ...
                //最后
                return res;
            }).collect(Collectors.toList());
              
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    上代码可以简化三个方法
    list.stream().map().collect(Collectors.toList());

    • .stream() 转化为stream流对象(就可以调用流对象的一些方法进行数据操作)
    • .map().collect() list中的每个值传入到map中的方法中去并通过collect(Collectors.toList())构建成新的list(res)

    实例

    外卖项目中应用;

    
        /**
         * 再来一单
         *
         * @param id
         */
        public void repetition(Long id) {
            // 查询当前用户id
            Long userId = BaseContext.getCurrentId();
            // 根据订单id查询当前订单详情
            List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderId(id);
    
            // 将订单详情对象转换为购物车对象
            List<ShoppingCart> shoppingCartList = orderDetailList.stream().map(x -> {
                ShoppingCart shoppingCart = new ShoppingCart();
    
                // 将原订单详情里面的菜品信息重新复制到购物车对象中
                BeanUtils.copyProperties(x, shoppingCart, "id");
                shoppingCart.setUserId(userId);
                shoppingCart.setCreateTime(LocalDateTime.now());
    
                return shoppingCart;
            }).collect(Collectors.toList());
    
            // 将购物车对象批量添加到数据库
            shoppingCartMapper.insertBatch(shoppingCartList);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    其中的流式编程,实现了
    for each去遍历orderDetailList,取出数据赋值给shoppingcart这个对象;构建新的ShoppingCart 的list;

  • 相关阅读:
    【云原生】Docker镜像详解
    关于string的一些测试
    软件测试学习路线
    【JVM】G1垃圾收集器知多少
    STTH6010-Y-ASEMI原厂代理意法超快恢复二极管STTH6010-Y
    手把手用 CSS 绘制一个忽闪忽闪的可爱小幽灵
    深度学习系列46:人脸图像超分GFP-GAN
    【CSDN创作活动】 - 我参加过的那些竞赛
    猿创征文|深聊MySQL,从入门到入坟之:应该是全网最详细的MySQL知识点汇总,必须收藏。
    MySQL函数(经典收藏)
  • 原文地址:https://blog.csdn.net/m0_60708917/article/details/134422465