java1.8流的新特性使用

news2024/12/22 6:00:31

案例描述

今天跟着黑马程序员的视频,完成“瑞吉外卖”项目的菜品信息管理模块的时候,遇到了一个比较陌生的写法

用到了Java8的新特性 stream().map((item) -> {}).collect()


   
   
  1. List<DishDto> collect = records.stream().map((item) -> {
  2. DishDto dishDto = new DishDto();
  3. BeanUtils.copyProperties(item,dishDto);
  4. Long categoryId = item.getCategoryId();
  5. Category category = categoryMapper.selectById(categoryId);
  6. if (category != null) {
  7. String categoryName = category.getName();
  8. dishDto.setCategoryName(categoryName);
  9. }
  10. return dishDto;
  11. }).collect(Collectors.toList());

等价写法 


   
   
  1. List<DishDto> collect = new ArrayList<>();
  2. for ( int i = 0; i < records.size(); i++) {
  3. DishDto dishDto = new DishDto();
  4. BeanUtils.copyProperties(records.get(i),dishDto);
  5. Long categoryId = records.get(i).getCategoryId();
  6. Category category = categoryMapper.selectById(categoryId);
  7. if (category != null) {
  8. String categoryName = category.getName();
  9. dishDto.setCategoryName(categoryName);
  10. }
  11. collect.add(dishDto);
  12. }
  13. dishDtoPage.setRecords(collect);

其实,说白了,我们就是要干一件事,就是把records这个数组遍历一下,把 records 里面的属性字段赋值给dishDto, 并且添加一些“内容”。

stream().map().collect() 

抽离出本质


   
   
  1. mylist.stream().map((item)->{
  2. return item;
  3. }).collect(Collectors.toList());

steam()

无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。

为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。

惰式执行。stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。

可消费性。stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。

map()

map 方法用于映射每个元素到对应的结果


   
   
  1. List<Integer> numbers = Arrays.asList( 3, 2, 2, 3, 7, 3, 5);
  2. List<Integer> squares = numbers.stream().map((i) -> {
  3. i = i*i;
  4. return i;
  5. }).distinct().collect(Collectors.toList());
  6. System.out.println(squares);
  7. // [9, 4, 49, 25]

简洁一点可以这样子:省略掉 ()-{}


   
   
  1. List<Integer> numbers = Arrays.asList( 3, 2, 2, 3, 7, 3, 5);
  2. List<Integer> squares = numbers.stream().map( i -> i*i).distinct()
  3. .collect(Collectors.toList());
  4. System.out.println(squares);

如果不理解,我们可以再看一个例子!

filter()

filter 方法用于通过设置的条件过滤出元素


   
   
  1. List<String>strings = Arrays.asList( "abc", "", "bc", "efg", "abcd", "", "jkl");
  2. // 获取空字符串的数量
  3. long count = strings.stream().filter(string -> string.isEmpty()).count();
  4. // 2
  5. System.out.println(count);

更多的例子,在菜鸟里面都有,就不搬了...... 

Java 8 Stream | 菜鸟教程 (runoob.com)icon-default.png?t=M85Bhttps://www.runoob.com/java/java8-streams.html
.collect(Collectors.toList())

将流中的所有元素导出到一个列表( List )


   
   
  1. Stream<String> s = Stream.of( "Geeks", "for", "GeeksforGeeks", "Geeks Classes");
  2. List<String> myList = s.collect(Collectors.toList());
  3. // [Geeks, for, GeeksforGeeks, Geeks Classes]
  4. System.out.println(myList);

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

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

相关文章

数据库基础(一)【MySQL】

文章目录 安装 MySQL修改密码连接和退出数据库服务器使用 systemctl 管理服务器进程配置数据库从文件角度看待数据库查看连接情况 安装 MySQL 这是在 Linux 中安装 MySQL 的教程&#xff1a;Linux 下 MySQL 安装。本系列测试用的 MySQL 版本是 5.7&#xff0c;机器是 centOS7.…

力扣刷题 day51:10-21

1.分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一…

Python在列表中如何对多个参数进行修改

1 问题 在python中经常会使用到列表&#xff0c;列表是常见的一种数据类型。对于一个庞大的列表&#xff0c;要调取列表中的对象&#xff0c;应如何快速准确的调取或快速的调取多个对象&#xff1f; 2 方法 解决问题的步骤采用如下方式&#xff1a; 基本的&#xff0c;已知元素…

【C语言进阶】指针进阶(三)

指针进阶&#xff08;三&#xff09; 9.指针和数组笔试题解析10.指针笔试题 9.指针和数组笔试题解析 数组名的理解 数组名是数组首元素的地址 但是有2个例外&#xff1a; sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;sizeof(数组名)计算的是整个数组的大…

5G投资下降,遥遥领先的主流5G或被运营商抛弃,“假5G”更获青睐

虽然媒体仍然在宣扬5G的诸多领先技术优势&#xff0c;不过需要付钱的运营商已在行动中做出抉择&#xff0c;那就是放缓主流5G的投资&#xff0c;大举投资曾被称为“假5G”的低频5G&#xff0c;现实迫使运营商做出了如此选择。 媒体披露的数据指2022年中国的5G投资下滑了2.5%&am…

golang 反射机制

在 go 语言中&#xff0c;实现反射能力的是 reflect包&#xff0c;能够让程序操作不同类型的对象。其中&#xff0c;在反射包中有两个非常重要的 类型和 函数&#xff0c;两个函数分别是&#xff1a; reflect.TypeOfreflect.ValueOf 两个类型是 reflect.Type 和 reflect.Value…

1024程序员博客创作者活动

1024程序员博客创作者活动 参加博客创作者活动&#xff0c;获取创作者荣誉、活动奖品、稿费、涨粉。每到节假日就会出现比较多的活动 常见的博客网站有CSDN、博客园、掘金者、51CTO、简书、慕课笔记、开源中国。 最近1024出现了各种各样的程序员活动&#xff0c;而且活动的奖…

操作系统学习笔记6-文件系统

侵权请联系我&#xff0c;会及时删除的。下面的图片主要是B站UP主的课程中的截图。 课程推荐链接地址&#xff0c;这个课程很好&#xff0c;具体课程在B站。 操作系统 文章目录 1、文件系统的由来-文件的由来2、文件系统的由来-目录的由来3、文件管理逻辑图4、闲聊文件系统5、…

第五届太原理工大学程序设计竞赛新生赛(初赛)题解

第五届太原理工大学程序设计竞赛新生赛&#xff08;初赛&#xff09;题解 时隔半年重做一次&#xff0c;还是有几道不会&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; ⭐️A.饿饿饭饭 题目&#xff1a; &#x1f31f;题解&#xff1a; 很简单&#xff0c;签…

【软考】11.3 需求分析/获取/定义/验证/管理

《软件需求》 需求分类 需求获取 联合需求计划&#xff08;JRP&#xff09;&#xff1a;联合各个关键用户代表、系统分析师、开发团队代表一起讨论需求 需求分析 结构化的需求分析 自顶向下&#xff0c;逐步分解&#xff0c;面向数据 功能模型&#xff08;数据流图&#xff0…

跟随光标圆形文本旋转

今天给大家带来的是光标变成圆形字符串环绕 不多说先上效果图 原理呢,也很简单 就是先把文本 <h2>大威天龙 - 世尊地藏 - 般若诸佛 - 般若巴嘛哄 -</h2>然后使用js将文本处理成每个字符一个span,并且让他们旋转 let text document.querySelector(h2)text.innerH…

详解FAT32文件系统的簇

FAT32文件系统中&#xff0c;簇&#xff08;Cluster&#xff09;是文件分配的基本单位。它是一组连续的扇区&#xff08;通常是硬盘扇区&#xff09;的集合&#xff0c;用于存储文件的数据。以下是关于FAT32簇的一些详细介绍&#xff1a; 簇的大小&#xff1a;簇的大小是FAT32文…

Node学习笔记之path模块

path 模块提供了 操作路径 的功能&#xff0c;我们将介绍如下几个较为常用的几个 API&#xff1a; API 说明 path.resolve 拼接规范的绝对路径常用 path.sep 获取操作系统的路径分隔符 path.parse 解析路径并返回对象 path.basename 获取路径的基础名称 path.dirname…

实际项目中最常用的设计模式

在软件开发领域,设计模式是一种经过验证的通用解决方案,用于解决各种常见问题。它们有助于提高代码的可维护性、可扩展性和可重用性。虽然有许多不同的设计模式,但以下是实际项目中最常用的一些: 1. 单例模式 (Singleton Pattern) 单例模式确保一个类只有一个实例,并提供…

计算机组成原理第三章 11 存储器的层次结构 存储器的分类 存储器的性能指标

文章目录 存储器的层次结构存储器的分类(存储介质分类)存取方式分类读写方式分类(是否可读可写)断电后信息是否丢失信息是否被破坏 存储器的性能指标 存储器的层次结构 其中CPU可以直接和cache和主存进行交互。辅存内的数据需要调到主存内才能被CPU访问&#xff0c;这很好理解&…

【C语言】指针进阶【下】

&#x1f388;个人主页&#xff1a;.满船清梦压星河_-CSDN博客 &#x1f302;c/c领域新星创作者 &#x1f389;欢迎&#x1f44d;点赞✍评论❤️收藏 &#x1f61b;&#x1f61b;&#x1f61b;希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xf…

修改ConsoleApplication17_2项目实现oss上线

首先创建号oss&#xff0c;上传文件&#xff0c;复制临时链接 木马内写 可以看到能成功上线但是有个问题就是占用cpu大小为9%左右&#xff0c;这里我用的是腾讯云oss实现的&#xff0c;用阿里云oss实现也是9%左右 我再次进行url的aes加密 还是百分之9左右&#xff0c; 这里…

利用ChatGPT进行数据分析并生成数据分析报告

目录 1 1 请罗列出中国所有的省份 按省份人口数量排序&#xff0c;给出序号&#xff0c;并整理成表格&#xff0c;人口最多的排在最前面&#xff1b; 在原有的数据源上&#xff0c;添加一些新的分类&#xff0c;并将分类结果进行反馈。 在表格中添加以下类别&#xff1a;男女…

网络协议--ICMP:Internet控制报文协议

6.1 引言 ICMP经常被认为是IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议&#xff08;TCP或UDP&#xff09;使用。一些ICMP报文把差错报文返回给用户进程。 ICMP报文是在IP数据报内部被传输的&#xff0c;如图6-1所示。 ICMP…

新兴网络安全威胁:数字防御新格局

根据Check Point Research (CPR)的数据&#xff0c;今年上半年犯罪活动大幅增加&#xff0c;第二季度全球每周网络攻击激增 8%&#xff0c;这创下了两年来的最高成交量。 勒索软件和黑客行为等传统威胁已经演变&#xff0c;犯罪团伙不断调整其方法和工具来渗透和影响世界各地的…