JAVA8 新特性StreamAPI使用(二)

一、使用StreamAPI,(基于数据模型——客户、订单和商品,实体关系图如下,客户可以有多个订单,是一对多的关系,而产品和订单的关系是多对多的)需求如下:

二、Stream API思维导图

 

三、需求:

   练习 1 — 获取商品属于"励志"类别的订单信息
   练习 2 — 获取商品"小说"类别的价格最贵的。
   练习 3 — 获取类别是"小说"的商品,且价格为8折销售。
   练习 4 — 获取类别是"小说"的商品,且价格>95的商品信息。
   练习 5 — 获取最近的 2 个订单
   练习 6 —  计算 2024 年 1 月的所有订单的总金额
   练习 7 — 获取"小说"的所有商品的聚合数据(即总和、平均值、最个数大值、最小值、个数)
   练习 8 —  获取订单中的ID和订单产品数量的数据
   练习 9 — 生成按客户分组的订单记录的数据映射
   练习 10 - 获取每个订单商品总价

 四、编码

4.1 、原始数据

List<Order> orders = null;List<Product> products = null;List<Customer> customers = null;@Beforepublic void load() {Product p1 = new Product(1, "人性的弱点", "励志", 56.89);Product p2 = new Product(2, "爱丽丝漫游奇境", "科幻", 26.60);Product p3 = new Product(3, "三国演义", "小说", 85.00);Product p4 = new Product(4, "水浒传", "小说", 99.00);Product p5 = new Product(5, "西游记", "小说", 95.00);Product p6 = new Product(6, "红楼梦", "小说", 105.00);//商品集合products = Arrays.asList(p1, p2, p3, p4, p5, p6);Customer c1 = new Customer(1, "刘芳", 1);Customer c2 = new Customer(2, "单满", 2);Customer c3 = new Customer(3, "王莉", 3);Customer c4 = new Customer(4, "程海燕", 1);Customer c5 = new Customer(5, "王城", 2);Customer c6 = new Customer(6, "王和明", 3);//客户集合customers = Arrays.asList(c1, c2, c3, c4, c5, c6);//集合数据List<Product> products1 = Arrays.asList(p1, p2, p3,p4);List<Product> products2 = Arrays.asList(p1, p4, p5);List<Product> products3 = Arrays.asList(p3, p2, p4);List<Product> products4 = Arrays.asList(p1, p5, p6);Order o1 = new Order(10010, "1", LocalDate.of(2024, 1, 3), LocalDate.of(2024, 1, 25), products1, c1);Order o2 = new Order(10011, "1", LocalDate.of(2024, 2, 5), LocalDate.of(2024, 2, 26), products2, c2);Order o3 = new Order(10012, "2", LocalDate.of(2024, 1, 8), LocalDate.of(2024, 1, 30), products3, c3);Order o4 = new Order(10013, "2", LocalDate.of(2024, 3, 1), LocalDate.of(2024, 3, 18), products4, c3);//订单集合orders = Arrays.asList(o1, o2, o3, o4);
//        System.out.println(orders);}

4.2、 操作1-10小题

  //    练习 1 — 获取商品属于"励志"类别的订单信息@Testpublic void test1() {List<Order> list = orders.stream().filter(o -> o.getProducts().stream().anyMatch(p -> p.getKind().equals("励志"))).collect(Collectors.toList());System.out.println(list);}//    练习 2 — 获取商品"小说"类别的价格最贵的。@Testpublic void test2() {Optional<Product> ll = products.stream().filter(p -> p.getKind().equals("小说")).max(Comparator.comparing(Product::getPrice));System.out.println(ll.get());}//    练习 3 — 获取类别是"小说"的商品,且价格为8折销售。@Testpublic void test3() {List<Double> ll = products.stream().filter(p -> p.getKind().equals("小说")).map(p -> p.getPrice() * 0.8).collect(Collectors.toList());System.out.println(ll);}//    练习 4 — 获取类别是"小说"的商品,且价格>95的商品信息。@Testpublic void test4() {products.stream().filter(p -> p.getKind().equals("小说")).filter(p -> p.getPrice() > 95).forEach(System.out::println);}//    练习 5 — 获取最近的 2 个订单@Testpublic void test5() {orders.stream().sorted(Comparator.comparing(Order::getOrderDate).reversed()) //降序.limit(2).forEach(System.out::println);}//    练习 6 —  计算 2024 年 1 月的所有订单的总金额@Testpublic void test6() {double sums=  orders.stream().filter(o->o.getOrderDate().compareTo(LocalDate.of(2024,1,1))>=0).filter(o->o.getOrderDate().compareTo(LocalDate.of(2024,2,1))<=0).flatMap(p->p.getProducts().stream()).mapToDouble(Product::getPrice).sum();System.out.println(sums);}//    练习 7 — 获取类别"小说"的所有商品的统计数据(即总和、平均值、最大值、最小值、个数)@Testpublic void test7() {DoubleSummaryStatistics dss= products.stream().filter(p -> p.getKind().equals("小说")).mapToDouble(Product::getPrice).summaryStatistics();System.out.println(dss);}//    练习 8 —  获取订单中的ID和订单产品数量的数据@Testpublic void test8() {Map<Long,Integer> map= orders.stream().collect(Collectors.toMap(Order::getOid,o->o.getProducts().size()));System.out.println(map);}//    练习 9 — 生成按客户分组的订单记录的数据映射@Testpublic void test9() {Map<Customer,List<Order>> map= orders.stream().collect(Collectors.groupingBy(Order::getCustomer));System.out.println(map);}//    练习 10 - 获取每个订单商品总价@Testpublic void test10() {Map<Order,Double> map= orders.stream().collect(Collectors.toMap(Function.identity(),o->o.getProducts().stream().mapToDouble(Product::getPrice).sum()));System.out.println(map);}

五、总结:

     采用 Java Stream API 是一种思维转变,从传统的命令式编程转变为函数式编程。因此,练习帮助我们思考流数据流中的逻辑很重要。

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

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

相关文章

3款必知的AI写作软件,智能写文效率高

在当今信息爆炸的时代&#xff0c;写作已经成为人们生活和工作中不可或缺的一部分。然而&#xff0c;随着人们对高效率和高质量写作需求的不断增加&#xff0c;人工智能写作软件应运而生。这些AI写作软件凭借其强大的语言处理能力和智能算法&#xff0c;为写作者们提供了全新的…

基于java的智能停车场管理系统

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

STC8H8K64U 学习笔记 - PWM

STC8H8K64U 学习笔记 - PWM 环境说明引脚说明 PWM呼吸灯震动马达 乐谱 环境说明 该内容仅针对我自己学习的开发板做的笔记&#xff0c;在实际开发中需要针对目标电路板的原理图进行针对性研究。 芯片&#xff1a;STC8H8K64U烧录软件&#xff1a;stc-isp-v6.92G编码工具&#xf…

wireshark抓包之DNS协议

DNS协议 DNS协议的主要作用是将域名解析为对应的IP地址。当我们在浏览器中输入一个网址时&#xff0c;计算机需要通过DNS协议来查找该网址对应的IP地址&#xff0c;以便能够建立连接并访问目标资源。 DNS协议的工作流程大致如下&#xff1a; 用户的计算机或设备&#xff08;充…

又到清明,祝你健康珍重!Wish you health and treasure!

随着清明节的到来&#xff0c;全国各地的人们都在怀念和哀悼逝去的亲友。People around China commemorated deceased relatives and friends as theQingming Festival begins. 清明节不仅是中国的二十四节气之一&#xff0c;也是中国人缅怀逝去亲人的日子。Qingming is not on…

数学矩阵(详解)

矩阵乘法 知阵乘法是《线性代数》中的基础内容&#xff0c;但在考察数学的算法题中也会出现。 本节我们学习基础的矩阵乘法规则。 每个矩阵会有一个行数和一个列数&#xff0c;只有当相乘的两个矩阵的左矩阵的列数等于右矩阵的行数 时&#xff0c;才能相乘&#xff0c;否则不允…

游戏APP如何提高广告变现收益的同时,保证用户留存率?

APP广告变现对接第三方聚合广告平台主要通过SDK文档对接&#xff0c;一些媒体APP不具备专业运营广告变现的对接能力和资源沉淀&#xff0c;导致APP被封控&#xff0c;设置列入黑名单&#xff0c;借助第三方聚合广告平台进行商业化变现是最佳选择。#APP广告变现# 接入第三方平台…

EasyDarwin 、ffmpeg 音视频推流拉流;OBS视频推理软件、obs-rtspserver服务器;python读取rtsp流

参考&#xff1a;https://blog.csdn.net/N71FS1/article/details/130019563 一、EasyDarwin ffmpeg ffmpeg 推送音视频流到rtsp流服务器 EasyDarwin 作为rtsp流服务器 &#xff08;下载&#xff1a;https://www.easydarwin.org/p/easydarwin.html&#xff09;OBS 直播音视频录…

分享:搭建企微知识库简单易学步骤

说起企微知识库&#xff0c;可能有些人还不太清楚&#xff0c;为什么现在很懂企业选择搭建企微知识库&#xff1f;其实&#xff0c;企微知识库就是一个装满了企业的各种知识、经验和资料的载体。目的是为了方便员工随时查找和学习、有助于知识的传承和共享、加强团队协作和沟通…

专题三_二分查找(2)

目录 35. 搜索插入位置 解析 题解 852. 山脉数组的峰顶索引 解析 题解 162. 寻找峰值 解析 题解 35. 搜索插入位置 35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 解析 题解 class Solution { public:int searchInsert(vector<int>& nums, int…

MS SQL Server STUFF 函数实战 统计记录行转为列显示

目录 范例运行环境 视图样本设计 数据统计要求 STUFF函数实现 小结 范例运行环境 操作系统&#xff1a; Windows Server 2019 DataCenter 数据库&#xff1a;Microsoft SQL Server 2016 视图样本设计 假设某一视图 [v_pj_rep1_lname_score] 可查询对某一被评价人的绩效…

重生奇迹mu召唤技能

1、召唤师与法师的共通技能&#xff1a;火球术、真空波、陨石、冰封。 2、摄魂咒&#xff1a;夺取敌人的体力来补充自己的体力。 3、链雷咒&#xff1a;雷系列的技能&#xff0c;给予敌人连锁3次的雷电攻击&#xff0c;如果目标附近没有其他目标&#xff0c;就会攻击第一个对…

手撕算法-有效的括号

描述 分析 使用栈&#xff0c;如果是左括号&#xff0c;入栈&#xff0c;如果是右括号&#xff0c;判断栈是否为空&#xff0c;不是空出栈并校验是否匹配&#xff0c;不匹配返回false。最后如果栈为空&#xff0c;返回true。 代码 class Solution {public boolean isValid(…

朵米3.5客服系统源码,附带系统搭建教程

朵米客服系统是一款全功能的客户服务解决方案&#xff0c;提供多渠道支持&#xff08;如在线聊天、邮件、电话等&#xff09;&#xff0c;帮助企业建立与客户的实时互动。该系统具有智能分流功能&#xff0c;可以快速将客户请求分配给适当的客服人员&#xff0c;提高工作效率。…

【网课必备】学浪视频下载到本地

学浪作为知识付费平台&#xff0c;拥有大量的课程&#xff0c;所以很多人在学浪上购买自己的课程&#xff0c;但是学浪官方没有提供下载选项&#xff0c;只可以在学浪客户端软件观看&#xff0c;并不是很方便 于是为了解决这一个需求&#xff0c;小白老师s开发了学浪视频下载到…

Three.js真实相机模拟

有没有想过如何在 3D Web 应用程序中模拟物理相机&#xff1f; 在这篇博文中&#xff0c;我将向你展示如何使用 Three.js和 OpenCV 来完成此操作。 我们将从模拟针孔相机模型开始&#xff0c;然后添加真实的镜头畸变。 具体来说&#xff0c;我们将仔细研究 OpenCV 的两个失真模…

C语言第三十八弹---编译和链接

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 编译和链接 1、翻译环境和运行环境 2、翻译环境 2.1、预处理&#xff08;预编译&#xff09; 2.2、编译 2.2.1、词法分析 2.2.2、语法分析 2.2.3、语义分…

共享WiFi项目加盟怎么做?碰到这些服务商要留意!

自2014年共享WiFi项目被微火研发出来让大众都可以参与其中&#xff0c;市场上不少合作伙伴都发现了该项目市场缺口大、推广难度低及落地性强等优势&#xff0c;想要加盟共享wifi项目。从目前的情况来看&#xff0c;不少代理商虽然对这个项目本身有一定的了解&#xff0c;但是靠…

扫地机器人(蓝桥杯)

文章目录 扫地机器人题目描述解题思路二分贪心 扫地机器人 题目描述 小明公司的办公区有一条长长的走廊&#xff0c;由 N 个方格区域组成&#xff0c;如下图所 示。 走廊内部署了 K 台扫地机器人&#xff0c;其中第 i 台在第 Ai 个方格区域中。已知扫地机器人每分钟可以移动…

Transformer模型-用jupyter演示逐步计算attention

学习transformer模型-用jupyter演示如何计算attention&#xff0c;不含multi-head attention&#xff0c;但包括权重矩阵W。 input embedding&#xff1a;文本嵌入 每个字符用长度为5的向量表示&#xff1a; 注意力公式&#xff1a; 1&#xff0c;准备Q K V&#xff1a; 先 生…