黑马苍穹外卖--再来一单(stream流转换、赋值与收集映射)

1.首先明确一下业务规则:

业务规则:

  • 再来一单就是将原订单中的商品重新加入到购物车中

2.产品页面原型和开发接口文档

3.业务层逻辑代码开发
3.1 查询方向

我们要明确的是:

  • 再来一单就是将原订单中的商品重新加入到购物车中------直接把商品加入到购物车,不需要查找orders对象,我们直接利用参数id查询当前订单详情,包括菜品信息以及喜好或者套餐信息。

3.2 将订单详情对象转换为购物车对象

此次对象的转换我们使用到的是:orderDetailList.stream().map(x->){ }

 List<ShoppingCart> shoppingCartList =orderDetailList.stream().map(x->{//这里的x代表的是  orderDetailList集合中每一个元素ShoppingCart shoppingCart=new ShoppingCart();return shoppingCart;})

         这里,orderDetailList是一个列表(经过查询数据后的结果),而 stream() 方法会将其转换为一个流(Stream),以便进行一系列的函数式操作。

        先将orderDetailList转换为一个Stream,然后使用map操作将每个OrderDetail对象转换为ShoppingCart对象。

        map 是Stream API中的一个中间操作,它接受一个函数作为参数,并将该函数应用到流中的每一个元素上。这里的 x 是流中元素的占位符,你可以通过 x 来引用流中的每一个元素,并对其进行某种转换或操作。

注!!!: map操作必须返回一个对象

        例如,假设你有一个 OrderDetail 类,它有一个 price 属性,你想得到所有订单详情的价格之和。你可以这样做:

List<OrderDetail> orderDetailList = // ... 获取订单详情列表
​
double totalPrice = orderDetailList.stream().map(orderDetail::getPrice) //将每个OrderDetail对象转换为它的价格(假设getPrice是获取价格的方法).mapToDouble(Double::doubleValue) //将Stream<BigDecimal>转换为Stream<Double>(如果price是BigDecimal类型).sum(); //计算价格的总和

        在上面的代码中,OrderDetail::getPrice 是一个方法引用,它等价于 x -> x.getPrice()。这意味着对于 orderDetailList 中的每个 OrderDetail 对象 x,我们都在调用其 getPrice() 方法来获取价格。

  mapToDouble 方法是将Stream中的元素转换为一个double值的流,这里假设 getPrice() 返回的是 BigDecimal 类型,我们需要将其转换为 double 以便进行数学运算。

        最后,sum() 方法计算了所有价格的总和。

请注意,Stream API 提供了丰富的中间操作和终止操作,允许你以声明式的方式处理集合数据。中间操作会返回一个新的流,而终止操作会返回一个非流的结果,或者执行某种副作用。

3.3 将原订单详情里面的菜品信息重新复制到购物车对象中
BeanUtils.copyProperties(x, shoppingCart, "id");

        使用Java的Stream API和Apache Commons BeanUtils库来orderDetailList中的OrderDetail对象转换为ShoppingCart对象列表。

        BeanUtils.copyProperties( )的第三个参数是一个用来指定要排除的属性名(参数),即忽略哪个参数

为什么要根据id参数值忽略某些数据:

        我们在进行再来一单业务逻辑处理前,首先在浏览界面对所选菜品或套餐进行加入购物车操作,在这一操作中,购物车中的id代表自身序号,接入一份数据便会++;在支付成功之后购物车中的数据会自动删除。由于购物车属性shopping_cart与订单属性orders性质不同,若是把订单属性中的id强加给购物车,信息紊乱无法使用。

3.4 收集Stream中映射后的对象
.collect(Collectors.toList());
  • 使用了Collectors.toList()来收集Stream中映射后的所有ShoppingCart对象到一个新的列表中。

完整代码如下:

public void repetition(long id) {//根据id查询到原来订单中菜品信息List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderId(id);
​//查询当前用户idLong userId = BaseContext.getCurrentId();
​// 将订单详情对象转换为购物车对象List<ShoppingCart> shoppingCartList =orderDetailList.stream().map(x->{//这里的x代表的是  orderDetailList集合中每一个元素ShoppingCart shoppingCart=new ShoppingCart();
​// 将原订单详情里面的菜品信息重新复制到购物车对象中BeanUtils.copyProperties(x,shoppingCart,"id");shoppingCart.setUserId(userId);shoppingCart.setCreateTime(LocalDateTime.now());
​return shoppingCart;}).collect(Collectors.toList());//Collectors.toList()来收集Stream中映射后的所有ShoppingCart对象到一个新的列表中
​//将购物车对象批量添加到数据库shoppingCartMapper.insertBatch(shoppingCartList);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/618845.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于机器学习/深度学习的一些事-答知乎问(二)

进化算法与深度强化学习算法结合如何进行改进&#xff1f; &#xff08;1&#xff09;进化算法普遍存在着样本效率低下的问题&#xff0c;虽然其探索度较高&#xff0c;但其本质为全局随机性搜索&#xff0c;需要在整个回合结束后才能更新其种群&#xff0c;而深度强化学习在每…

云笔记小程序的实现

1.前言 云笔记, 是基于HotApp小程序统计云后台提供的api接口开发的一个微信小程序。 2.功能 离线保存笔记 云端数据同步, 更换了设备也可以找到以前的笔记 接入了好推二维码提供的数据统计工具, 可以到平台上查看用户分析、留存分析、事件分析。 3.界面效果 ***HotApp云笔…

一个基于单片机内存管理-开源模块

概述 此模块是一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。 源码仓库:GitHub - chenqy2018/mem_malloc mem_malloc介绍 一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎…

【opencv】示例-stereo_match.cpp 立体匹配:通过对左右视图图像进行处理来生成视差图和点云数据...

/** stereo_match.cpp* calibration** 创建者 Victor Eruhimov&#xff0c;日期为 2010年1月18日。* 版权所有 2010 Argus Corp.**/#include "opencv2/calib3d/calib3d.hpp" // 导入OpenCV相机标定和三维重建相关的头文件 #include "opencv2/imgproc.hpp&qu…

您与此网站之间建立的连接不安全

正如标题一样&#xff0c;打开的网站地址栏显示&#xff1a;如果你使用浏览器提示您与此网站之间建立的连接不安全、与此站点的连接不安全、网站非安全连接等类似提示。 是因为网站采取的是http地址协议&#xff0c;这种协议有一种缺点&#xff0c;当您常使用的网站出现上述提示…

ASP.NET基于BS的图书销售管理系统的设计与实现

随着Internet的兴起&#xff0c;网络已经成为现代人生活中的一部分&#xff0c;越来越多的人喜欢在网上交易。本系统就是一个基于B/S模式的网络化的图书销售管理系统,采用的是ASP.NET技术&#xff0c;实现了用户注册信息管理、用户信息管理、图书销售点管理、图书信息管理、客户…

8. Spring Boot 配置文件

源码地址&#xff1a;SpringBoot_demo 本篇文章内容源码位于上述地址的com/chenshu/springboot_demo/config包下 1. 配置文件是什么 上节说到&#xff0c;Spring Boot的项目分为三个部分&#xff1a;源代码目录、资源目录、单元测试目录。 而配置文件的位置就位于资源目录res…

科技助力输电线安全隐患预警,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建电力设备场景下输电线安全隐患目标检测预警系统

电力的普及让我们的生活变得更加便利&#xff0c;四通八达的电网连接着生活的方方面面&#xff0c;电力能源主要是依托于庞大复杂的电网电力设备进行传输的&#xff0c;有效地保障电网场景下输电线的安全对于保障我们日常生活所需要的电力有着重要的意义&#xff0c;但是电力设…

宝塔面板Docker+Uwsgi+Nginx+SSL部署Django项目

这次为大家带来的是从零开始搭建一个django项目并将它部署到linux服务器上。大家可以按照我的步骤一步步操作&#xff0c;最终可以完成部署。 步骤1&#xff1a;在某个文件夹中创建一个django项目 安装django pip install django创建一个django项目将其命名为djangoProject …

再写-全景拼接

全景拼接 1. 将读取进行灰度转化&#xff0c;并且输出图像&#xff0c;关键点和计算描述 import cv2 import numpy as np# 将读取进行灰度转化&#xff0c;并且输出图像&#xff0c;关键点和计算描述 image_left cv2.imread("C:\\Users\\HONOR\\Desktop\\image\\pinjie…

微信登录功能-保姆级教学

目录 一、使用组件 二、登录功能 2.1 步骤 2.2 首先找到网页权限 复制demo 代码 这里我们需要修改两个参数 三、前端代码 3.1 api 里weiXinApi.ts 3.2 api里的 index.ts 3.3 pinia.ts 3.4 My.vue 四、后端代码 4.1 WeiXinController 4.2 Access_Token.Java 4.3 We…

1027: 舞伴问题

解法&#xff1a; #include<iostream> #include<vector> using namespace std; int main() {int n, m, k;cin >> n;vector<char> man(n);for (int i 0; i < n; i) cin >> man[i];cin >> m;vector<char> woman(m);for (int i 0…