Java中Stream的flatMap与map使用场景及区别详解
基本概念
Stream 流式操作,一般用于操作集合即 List 一类的数据结构,JDK 1.8 后的新特性
Stream 中的 map
一般用于对List 中的每一个元素执行指定方法使得最终结果为最终的集合为每一个记录的某一属性的集合(get 方法)或者通过自定义的转换方法等通过方法的加工将每一个元素处理为另一种元素最终返回成为一种全新元素的集合,即 简单来说 Stream 的 map 使得其中的元素转为另一种元素的映射(map)方法。
Stream 中的 flatMap
flat (扁平化) 当我们处理某一个集合时,这个集合中的某一个属性依旧是一个集合即 类似于二维数组可以如下理解: 我们定义一个人的类,每个人又有很多衣服,衣服也定义一个类,所以可以如下定义:

如果我们处理一个人的List 集合,并想把所有人的 服装List 合并到一起时就可以使用 flatMap 案例如下:
List<Clothes> clothesList1 = new ArrayList<>(); clothesList1.add(new Clothes("大衣")); clothesList1.add(new Clothes("外套")); List<Clothes> clothesList2 = new ArrayList<>(); clothesList2.add(new Clothes("衬衣")); clothesList2.add(new Clothes("短袖")); // 第一个人 HumanBeing humanBeing = new HumanBeing(); humanBeing.setClothesList(clothesList1); // 第二个人 HumanBeing humanBeing2 = new HumanBeing(); humanBeing2.setClothesList(clothesList2); List<HumanBeing> humanBeingList = new ArrayList<>(); humanBeingList.add(humanBeing); humanBeingList.add(humanBeing2); // flatMap 执行 List<Clothes> collect = humanBeingList.stream() .flatMap(aPerson -> aPerson.getClothesList().stream()) .collect(Collectors.toList()); // map 执行 List<List<Clothes>> collect1 = humanBeingList.stream() .map(item -> item.getClothesList()) .collect(Collectors.toList()); System.out.println("collect = " + collect);结果如下:
collect1 = [[Clothes(name=大衣, type=null, price=0.0, weight=0.0, size=null), Clothes(name=外套, type=null, price=0.0, weight=0.0, size=null)], [Clothes(name=衬衣, type=null, price=0.0, weight=0.0, size=null), Clothes(name=短袖, type=null, price=0.0, weight=0.0, size=null)]]collect = [Clothes(name=大衣, type=null, price=0.0, weight=0.0, size=null), Clothes(name=外套, type=null, price=0.0, weight=0.0, size=null), Clothes(name=衬衣, type=null, price=0.0, weight=0.0, size=null), Clothes(name=短袖, type=null, price=0.0, weight=0.0, size=null)]
可以看的出我们最终的结果中 flatMap 将每一个人的衣服集合合并到了一个集合中。而 普通的map 只是将多个List 加入到了一个 List 相当于一个二维数组。 flatMap 可以看做两个流程,先执行 普通的map,然后执行 flat 扁平化过程,可以如图理解如下:

到此这篇关于Java中Stream的flatMap与map使用场景及区别详解的文章就介绍到这了,更多相关flatMap与map使用场景及区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring使用Configuration注解管理bean的方式详解
在Spring的世界里,Configuration注解就像是一位细心的园丁,它的主要职责是在这个繁花似锦的园子里,帮助我们声明和管理各种各样的bean,本文给大家介绍了在Spring中如何优雅地管理你的bean,需要的朋友可以参考下2024-05-05
Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式)
本篇文章主要介绍了Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式),具有一定的参考价值,感兴趣的小伙伴们可以参考一下。2017-03-03
Bean Searcher配合SpringBoot的使用详解
这篇文章主要介绍了Bean Searcher配合SpringBoot的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-06-06
关于spring项目中无法加载resources下文件问题及解决方法
在学习Spring过程中,TestContext框架试图检测一个默认的XML资源位置,再resources下创建了一个com.example的文件夹,执行时,报错,本文给大家介绍spring项目中无法加载resources下文件,感兴趣的朋友跟随小编一起看看吧2023-10-10


最新评论