java1.8新特性流

news/2024/7/7 22:20:44

案例描述

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

用到了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://lihuaxi.xjx100.cn/news/1704129.html

相关文章

深度学习---神经网络基础

深度学习概述 机器学习是实现人工智能的一种途径&#xff0c;深度学习是机器学习的一个子集&#xff0c;深度学习是实现机器学习的一种方法。与机器学习算法的主要区别如下图所示&#xff1a; 传统机器学习算术依赖人工设计特征&#xff0c;并进行特征提取&#xff0c;而深度学…

【编解码格式】AVS系列

AVS1 AVS&#xff08;Audio Video coding Standard&#xff09;为中国具备自主知识产权的第二代信源编码标准&#xff0c;此编码技术主要解决数字音视频海量数据&#xff08;即初始数据、信源&#xff09;的编码压缩问题&#xff0c;故也称数字音视频编解码技术。目前国际上音…

解决CondaHTTPError HTTP 000 CONNECTION FAILED for url解决方法

解决CondaHTTPError: HTTP 000 CONNECTION FAILED for url解决方法 问题&#xff1a;使用conda install命令安装包提示CondaHTTPError: HTTP 000 CONNECTION FAILED for url 分析&#xff1a;网络连接问题&#xff0c;大概率是网速不行或者源没有换 解决方案&#xff1a;修改国…

Mysql数据库表操作--存储

建表&#xff1a; 插入上面的数据&#xff1a; 1、创建一个可以统计表格内记录条数的存储函数 &#xff0c;函数名为count_sch() 2、创建一个存储过程avg_sal&#xff0c;有3个参数&#xff0c;分别是deptno&#xff0c;job&#xff0c;接收平均工资(out);功能查询employees表的…

vue将日期数据转换成字符串

使用Vue中的过滤器&#xff08;Filter&#xff09;可以将日期数据转换成字符串。 下面是一个例子&#xff1a; <template><div><h1>日期转字符串示例</h1><p>日期&#xff1a;{{ date | formatDate }}</p></div> </template>…

thinkPHP框架详解+部署

目录 什么是ThinkPHP: ThinkPHP的主要特性&#xff1a; 什么是ThinkPHP: ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架&#xff0c;诞生于2006年初&#xff0c;由国内的技术爱好者创建&#xff0c;遵循Apache2开源协议发布&#xff0c;是为了敏捷WEB应用开发和…

C#WPFPrism框架模块化应用实例

本文实例演示C#WPFPrism框架模块化应用实例。 首先创建WPF项目,修改App相关文件内容,以便使用prism。 一、添加模块 解决方案中添加ModuleA和ModuleB两个项目 删除不用的窗体,添加自定义窗体 修改ModuleA和ModuleB的输出类型

Ubuntu - 安装 Elasticsearch(ES)

注意&#xff1a;以下步骤基于 Elasticsearch 7.x 版本。版本可能会随时间而变化&#xff0c;请查看 Elasticsearch 官方网站以获取最新的版本信息。 添加 Elasticsearch APT 仓库&#xff1a; 打开终端&#xff0c;并使用以下命令添加 Elasticsearch APT 仓库到系统&#xf…