当前位置: 首页 > article >正文

Stream流将List列表中的每个对象赋值给另外一个List列表中的每个对象

源代码:

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

当使用流操作(stream)遍历订单详情列表并将每个订单详情对象转换为购物车对象时,代码段中的Lambda表达式起着关键作用。让我详细解释一下每一步是如何实现的:

  1. 使用流操作遍历订单详情列表:

    List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderId(id);

    这一行代码首先获取了指定订单id的订单详情列表。然后,使用 .stream() 方法将列表转换为一个流,使得我们可以对列表中的每个元素进行处理。

  2. 对每个订单详情对象执行转换操作:

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

    在这里.map() 方法接收一个函数作为参数,该函数将应用于流中的每个元素。Lambda表达式 x -> { ... } 将每个订单详情对象 x 转换为一个购物车对象,并返回该购物车对象。

  3. 将结果收集到列表中:

    .collect(Collectors.toList());

    最后,使用 .collect(Collectors.toList()) 方法将转换后的购物车对象收集到一个列表中,并返回该列表。

在每次迭代中,新创建一个购物车对象,并使用 BeanUtils.copyProperties() 方法将订单详情对象的属性复制到购物车对象中。然后设置购物车对象的用户id为当前用户id,创建时间为当前时间。

通过这种方式,对订单详情列表中的每个订单详情对象进行转换,最终得到一个包含所有转换后购物车对象的列表。


http://www.kler.cn/news/273697.html

相关文章:

  • Java的集合类
  • idea 开发serlvet班级通讯录管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发
  • 阿里云ecs服务器配置反向代理上传图片
  • spring 没完没了
  • flink重温笔记(十七): flinkSQL 顶层 API ——SQLClient 及流批一体化
  • Excel xlsx file:not supported
  • 零基础学python:10、 函数的基础3
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(绘制组件:Rect)
  • springboot+poi-tl根据模板导出word(含动态表格和图片),并将导出的文档压缩zip导出
  • k8s admin 用户生成token
  • JavaScript之继承
  • 【sql】初识 where EXISTS
  • MySQL---索引
  • 第十四届蓝桥杯省赛C++B组题解
  • 【Unity动画】Unity如何导入序列帧动画(GIF)
  • 护眼灯和白炽灯哪个更保护眼睛?四款必选的高口碑护眼台灯
  • 第二十二章 构建和配置 Nginx (UNIX® Linux macOS) - 示例:为特定路径上的所有流量启用 CSP 路由
  • idea2023 运行多 springboot 实例
  • 计算机网络:TCP篇
  • 外贸网站常用的wordpress模板
  • 学习笔记Day8:GEO数据挖掘-基因表达芯片
  • 用JDBC游标的方式导出mysql数据以及springboot打包成exe程序实践
  • 每天一个数据分析题(二百一十六)
  • SpringBoot2.7集成Swagger3
  • AcWing 1510:楼梯 ← 浮点数二分
  • 基于Matlab的视频人面检测识别,Matalb实现
  • CTF 题型 SSRF攻击例题总结
  • Linux/Ubuntu/Debian的终端中和的区别
  • Android学习进阶
  • 3种场景探讨ChatGPT如何改变投资者对测试管理初创企业的看法