java新特性流 stream01

案例描述

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

用到了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.rhkb.cn/news/167138.html

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

相关文章

【德哥说库系列】-RHEL8环境源码编译安装MySQL8.0

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

【C++】C++11新特性之右值引用与移动语义

文章目录 一、左值与左值引用二、右值与右值引用三、 左值引用与右值引用比较四、右值引用使用场景和意义1.左值引用的短板2.移动构造和移动赋值3.STL中右值引用的使用 五、万能引用与完美转发1.万能引用2.完美转发 一、左值与左值引用 在C11之前&#xff0c;我们把数据分为常…

[论文笔记]GPT-2

引言 今天继续GPT系列论文&#xff0c; 这次是Language Models are Unsupervised Multitask Learners&#xff0c;即GPT-2&#xff0c;中文题目的意思是 语言模型是无监督多任务学习器。 自然语言任务&#xff0c;比如问答、机器翻译、阅读理解和摘要&#xff0c;是在任务相关…

框架篇

一、Spring中的单例Bean是线程安全的吗 二、AOP相关面试题 三、Spring中的事务 四、Spring中事务失效的场景有 五、Spring bean的生命周期 六、Spring的循环依赖 七、SpringMVC的执行流程 八、自动配置原理 九、Spring框架常见的注解 十、Mybatis的执行流程 十一、MyBatis延迟加…

postgresql(openGauss)模糊匹配参数

被pg系这个show要求精准匹配参数恶心的不轻。 原理是用.psqlrc&#xff08;openGauss用.gsqlrc&#xff09;文件set一个select常量进去&#xff0c;需要用&#xff1a;调用这个常量。理论上也可以增强其他的各种功能。 我在openGauss做的一个例子 .gsqlrc&#xff08;.psqlrc…

自学SLAM(4)《第二讲:三维物体刚体运动》作业

前言 小编研究生的研究方向是视觉SLAM&#xff0c;目前在自学&#xff0c;本篇文章为初学高翔老师课的第二次作业。 文章目录 前言1.熟悉 Eigen 矩阵运算2.几何运算练习3.旋转的表达4.罗德里格斯公式的证明5.四元数运算性质的验证6.熟悉 C11 1.熟悉 Eigen 矩阵运算 设线性⽅程 …

分布式共识算法及落地

摘要 本文介绍常见的分布式共识算法&#xff0c;使用场景&#xff0c;以及相关已经落地了的程序或框架 1. 为什么要分布式共识算法 在分布式系统中&#xff0c;不同节点之间可能存在网络延迟、故障等原因导致彼此之间存在数据不一致的情况&#xff0c;为了保证分布式系统中的…

[TCP1P 2023] 部分crypto,pwn,reverse

Crypto Final Consensus 这是个AES爆破密钥的题&#xff0c;加密方法是先后用两个密钥加密。远程先给出加密后的flag&#xff0c;然后允许输入值并进行加密。 from Crypto.Cipher import AES import random from Crypto.Util.Padding import pada b"" b b"&…

系统架构师考试科目一:综合知识

某软件公司欲开发一个 Windows 平台上的公告板系统。在明确用户需求后&#xff0c;该公司的 架构师决定采用 Command 模式实现该系统的界面显示部分&#xff0c;并设计 UML 类图如下 图所示。图中与 Command 模式中的 Invoker 角色相对应的类是( ) &#xff0c;与 ConcreteComm…

一篇文章讲懂mysql中的锁

事务的隔离性是由锁来实现的。 为什么需要锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题&#xff0c;当多个线程并发访问某个数据的时候&#xff0c;尤其是针对一些敏感的数据&#xff08;比如订单、金额等&#xff09;&#x…

C语言 ——宽字符

前言&#xff1a; 过去C语⾔并不适合⾮英语国家&#xff08;地区&#xff09;使⽤。 C语⾔最初假定字符都是单字节的。但是这些假定并不是在世界的任何地⽅都适⽤。 C语⾔字符默认是采⽤ASCII编码的&#xff0c;ASCII字符集采⽤的是单字节编码&#xff0c;且只使⽤了单字节中…

Opensuse Tumbleweed快速部署K8S-1.28.2

** #查看你的网卡信息 nmcli device show#设置你的静态IP nmcli connection modify ens32 ipv4.method manual \ipv4.addresses 172.16.20.214/24 ipv4.gateway 172.16.20.1 \ipv4.dns 114.114.114.114#重启网卡生效 nmcli c down ens32 && nmcli c up ens32#添加DNS …

代码随想录算法训练营第二十九天 | 回溯算法总结

​ 代码随想录算法训练营第二十九天 | 回溯算法总结 1. 组合问题 1.1 组合问题 在77. 组合中&#xff0c;我们开始用回溯法解决第一道题目&#xff1a;组合问题。 回溯算法跟k层for循环同样是暴力解法&#xff0c;为什么用回溯呢&#xff1f;回溯法的魅力&#xff0c;用递…

解决appium或selenium使用时driver.find_element_by_xpath中间有删除线问题

一、问题描述 Darren洋在公司电脑搭建完成appium后准备运行appium2.0版本执行脚本时发现执行脚本中的driver.find_element_by_xpath中间有删除线&#xff0c;说明较高版本的appium及selenium中该方法已被弃用。 二、解决办法 该问题解决办法为将driver.find_element_by_xpath()…

Linux线程--创建及等待

1.进程与线程 典型的UNIX/Linux进程可以看成只有一个控制线程&#xff1a;一个进程在同一时刻只做一件事情。有了多个控制线程后&#xff0c;在程序设计时可以把进程设计成在同一时刻做不止一件事&#xff0c;每个线程各自处理独立的任务。  线程是操作系统能够进行运算调度的…

Android Studio快速实现Flutter应用的国际化和多语言支持

文章目录 Flutter实现国际化和多语言支持添加依赖库Android Studio 安装flutter Intl插件项目初始化增加语言app中使用国际化在应用中切换语言&#xff1a;运行应用 总结easy_localization 插件intl 包Flutter GetX 包flutter_i18n 插件JSON 文件 Flutter实现国际化和多语言支持…

01、Python 的数据类型

目录 数据类型Python变量具有如下两个特征&#xff1a;输出变量 标识符规则整型四种表示形式浮点数复数 数据类型 使用Python变量 Python的基础类型 Python变量具有如下两个特征&#xff1a; 变量无需声明即可直接赋值&#xff1a;对一个不存在的变量赋值就相当于定义了一个…

html表格标签

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><!--表格table 行 tr 列 td --> <table border"1px"><tr> <!--colsp…

mac 升级node到指定版本

node版本14.15.1升级到最新稳定版18.18.2 mac系统 先查看一下自己的node版本 node -v开始升级 第一步 清除node的缓存 sudo npm cache clean -f第二步 安装n模块【管理模块 n是管理 nodejs版本】 sudo npm install -g n第三步升级node sudo n stable // 把当前系统的 Node…