Java中Stream流中map和forEach的区别详解
作者:Haoo_是个程序员 发布时间:2022-07-09 12:24:43
不是很难的知识,但是今天犯错了,记录一下
什么是 stream 流
我们在使用集合或数组对元素进行操作时往往会遇到这种情况:通过对不同类型的存储元素,按照特定条件进行查找、排序、等操作时往往会写一大段代码,而且更要命的是,不同类型的数据,操作的方法也不一样,比如一个存储 Student 实体类和一个只存储 String 类型的集合俩者的操作步骤肯定大不一样且无法通用,而 stream API 就解决了这些问题,对数据操作时进行了统一的处理。
可以这样理解,stream API 把集合或数组里面的数据转换成统一格式,在通过指定的方法,对里面的元素进行操作,之后将操作过后的的数据按照流的格式返回。这样做的好处就是我们不必再关心我们操作的数据是什么类型,只需要统一转换成 stearm 流进行统一操作,大大简化了我们开发时的过程。
Map
Map 方法接收一个功能型接口,功能型接口接收一个参数( Function<T, R> 接口),有返回值,返回的是一个新流,可以对这个流进一步操作(即中间操作)
Map()是1对1的映射,只是起到映射作用,不会对原来的list中的元素做出任何改变。map方法调用完之后,如果需要得到一个list类型的结果,必须有.collect(Collectors.toList())
forEach
forEach 接收一个 Consumer 接口,没有返回值
forEach() 是遍历list中的所有元素并做处理,会改变原来的list中的元素。
即使看不懂这俩个方法定义,但你也肯定能知道 forEach 返回的 void, 而 map 返回的 Stream 类型,接下来再看这个例子👇
// 定义一个 Integer 类型的集合
List<Integer> numbers = Arrays.asList( 2, 3, 7, 5);
// 获取对应的平方数
numbers.stream().map(x-> x*x).forEach(System.out::println);
//结果: 4 9 49 25
由此可以得到结论: map 是将 number 中的每个元素进行取值之后进行操作,再将操作过后的每个结果返回到 number 中去,而 forEach 是单纯的得到 number 集合中的值但并不能对其中里面的值进行操作
使用场景
当只是使用一下list中的元素的时候,用map;
当需要改变list中的元素值的时候,用forEach
来源:https://juejin.cn/post/7087474557648863246


猜你喜欢
- Future接口是Java标准API的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式
- 目录一、自定义认证逻辑二、自定义过滤器总结一、自定义认证逻辑生成验证码工具<dependency> &
- 目录1. 简单认识BeanProcessorBeanProcessor的理解一个BeanProcessor的使用实例2. BeanProce
- 前言在微服务的多样化世界中,HTTP是代理到代理通信中无可争议的领导者。它成熟,无处不在。但在某些情况下,HTTP请求-响应可能很麻烦。如果
- 介绍java中Pair在这篇文章中,我们讨论了一个非常有用的编程概念,配对(Pair)。配对提供了一种方便方式来处理简单的键值关联,当我们想
- WORD: import org.apache.lucene.document.Document; import org.apache.lu
- 本文介绍如何通过C# 程序来扫描并读取图片中的文字,这里以创建一个.Net Core程序为例。下面是具体步骤,供参考。程序测试环境:Visu
- 工具方法:本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据maven 引用jar包版本:<dependency&g
- 测试参数设置:1、循环调用new A()实现堆溢出,java.lang.OutOfMemoryError: Java heap space,
- Java goto语句妙用今天和朋友聊天的时候,无意间聊到了 goto 语句,但是在 Java 中, goto 是保留关键字,但是朋友说 J
- 写在前面“The origin server did not find a current representation for the t
- 本文实例为大家分享了java日期时间基本操作方法,供大家参考,具体内容如下1. 获得Calendar实例:Calendar c = Cale
- 一、C#和JS互相调用 1、js调用C# C#代码如下: webView.CoreWebView2.AddHo
- C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解。还有托管堆,栈,ref,out等等概念也是每个C#程序员
- 在前面的文章中也有关于 HorizontalScrollView 的使用:Android使用HorizontalScrollView实现水平
- 目录一、ThreadLocal简介二、ThreadLocal简单使用三、ThreadLocal的实现原理1、set方法源码2、get方法源码
- 游戏服务器里面总是有一大堆的配置文件需要读取, 而且这些配置文件的读取: * 要不然做成弱类型的, 就是一堆字符串或者数字, 不能看出来错误
- JavaConfig,是在 Spring 3.0 开始从一个独立的项目并入到 Spring 中的。JavaConfig 可以看成一个用于完成
- 前言缓存主要是为了提高数据的读取速度。因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少
- 最近项目中使用了mybatis-plus 3.1.1版本,发现使用lambda表达式方式的条件构造器,执行时会报错;但是我用单元测试却通过,