Java中Stream的flatMap与map使用场景及区别详解

 更新时间:2024年01月27日 08:36:27   作者:极光雨雨  
这篇文章主要介绍了Java中Stream的flatMap与map使用场景及区别详解,Stream 流式操作,一般用于操作集合即 List 一类的数据结构,简单来说 Stream 的 map 使得其中的元素转为另一种元素的映射(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使用场景及区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解如何通过Java实现类似Nginx代理

    详解如何通过Java实现类似Nginx代理

    最近遇到一个问题,在内网环境中部署的项目需要调用外网完成一些应用,一般情况我们可以通过增加一台机器,部署到可以访问外网的服务器上,然后内网直接连接该机器通过Nginx进行代理即可,所以本文介绍了如何通过Java实现类似Nginx代理,需要的朋友可以参考下
    2024-08-08
  • Spring使用Configuration注解管理bean的方式详解

    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开发框架(注解模式)

    本篇文章主要介绍了Spring MVC 4.1.3 + MyBatis零基础搭建Web开发框架(注解模式),具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • 详解如何在Java项目中实现信号的连续接收

    详解如何在Java项目中实现信号的连续接收

    在Java项目中,信号的连续接收是一项重要的任务,特别是在处理异步事件或者需要对外部事件做出响应时,本篇博客将介绍如何在Java项目中实现信号的连续接收,包括信号的监听、处理和停止等步骤,需要的朋友可以参考下
    2023-11-11
  • Java实现英文句子中的单词顺序逆序输出的方法

    Java实现英文句子中的单词顺序逆序输出的方法

    这篇文章主要介绍了Java实现英文句子中的单词顺序逆序输出的方法,涉及java字符串遍历、判断、截取、输出等相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • Java实现的校验银行卡功能示例

    Java实现的校验银行卡功能示例

    这篇文章主要介绍了Java实现的校验银行卡功能,结合完整实例形式分析了java针对银行卡类型、归属地等信息的判断、读取相关操作技巧,需要的朋友可以参考下
    2018-06-06
  • 详解Java进阶知识注解

    详解Java进阶知识注解

    这篇文章主要介绍了详解Java进阶知识注解,从注解的定义、元注解、自定义注解、注解实例这几个方面,让同学们更加深入的了解注解
    2021-04-04
  • Bean Searcher配合SpringBoot的使用详解

    Bean Searcher配合SpringBoot的使用详解

    这篇文章主要介绍了Bean Searcher配合SpringBoot的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 关于spring项目中无法加载resources下文件问题及解决方法

    关于spring项目中无法加载resources下文件问题及解决方法

    在学习Spring过程中,TestContext框架试图检测一个默认的XML资源位置,再resources下创建了一个com.example的文件夹,执行时,报错,本文给大家介绍spring项目中无法加载resources下文件,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • MyBatis-Plus 默认不更新null的4种方法

    MyBatis-Plus 默认不更新null的4种方法

    本文主要介绍了MyBatis-Plus 默认不更新null的4种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-01-01

最新评论