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

  • 相关阅读:
    LeetCode 2886.改变数据类型
    golang中出于性能考虑的那些实用代码片段 |字符串篇
    [附源码]java毕业设计农村电商平台
    ERP软件公司选型的重要根据
    总结:从实模式到保护模式的流程和相关寄存器,相关数据结构之间的联系
    简易版的进程池
    rook-ceph部署
    Android面试官:入职大厂的Android程序员具备怎样的专业素养?
    人工智能将如何改变敏捷项目管理?
    使用image-map编写校区平面示意图
  • 原文地址:https://blog.csdn.net/m0_60708917/article/details/134422465