java8中stream的flatMap方法跟map方法有什么区别
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Java 8中,Stream
API引入了map
和flatMap
两个非常有用的方法,它们都用于转换流中的元素,但它们之间存在关键区别:
map方法:
map
方法接收一个Function
接口作为参数,这个函数会被应用到流中的每个元素上,产生一个新的值。这意味着它将每个输入元素一对一地转换为一个新的输出元素,保持了输出流的元素个数与输入流相同。map
来将每个整数乘以2,你会得到一个新流,其中每个元素都是原流中元素的两倍,且新流的大小与原流相同。flatMap方法:
flatMap
同样接收一个函数作为参数,但是这个函数应该返回一个流而不是单个值。flatMap
会将每个输入元素转换为一个流,然后将这些流连接成一个单一的流。这导致输出流的元素数量可能与输入流不同,特别是当内部流可以有0个或多个元素时。flatMap
来展平这个结构,即把所有列表中的字符串合并成一个单一的字符串流,这样输出流的大小将是所有内部列表元素的总和。总结来说,map
适用于简单的“一对一”转换,而flatMap
则用于“一对多”的转换,特别适合于将嵌套结构扁平化处理。