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使用场景及区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot Controller返回图片的三种方式

    SpringBoot Controller返回图片的三种方式

    在互联网的世界里,图片无处不在,它们是信息传递的重要媒介,也是视觉盛宴的一部分,而在Spring Boot项目中,如何优雅地处理和返回图片数据,则成为了开发者们不得不面对的问题,今天,就让我们一起来探索Spring Boot Controller的神奇转换,需要的朋友可以参考下
    2024-07-07
  • SpringBoot基于过滤器和内存实现重复请求拦截功能

    SpringBoot基于过滤器和内存实现重复请求拦截功能

    这篇文章主要介绍了SpringBoot基于过滤器和内存实现重复请求拦截,这里我们使用过滤器的方式对进入服务器的请求进行过滤操作,实现对相同客户端请求同一个接口的过滤,需要的朋友可以参考下
    2023-01-01
  • Java中eq、ne、ge、gt、le、lt的含义详细解释

    Java中eq、ne、ge、gt、le、lt的含义详细解释

    Java中的比较运算符包括eq(等于)、ne(不等于)、ge(大于或等于)、gt(大于)、le(小于或等于)和lt(小于),这些运算符在控制流语句和条件语句中用于判断条件是否满足,从而决定程序的执行路径,需要的朋友可以参考下
    2024-11-11
  • Java中的权限修饰符(protected)示例详解

    Java中的权限修饰符(protected)示例详解

    这篇文章主要给大家介绍了关于Java中权限修饰符(protected)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 一文彻底弄懂零拷贝原理以及java实现

    一文彻底弄懂零拷贝原理以及java实现

    零拷贝(英语: Zero-copy) 技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域,下面这篇文章主要给大家介绍了关于零拷贝原理以及java实现的相关资料,需要的朋友可以参考下
    2021-08-08
  • java实现字符串反转

    java实现字符串反转

    这篇文章主要为大家详细介绍了java实现字符串反转,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Java文件操作之序列化与对象处理流详解

    Java文件操作之序列化与对象处理流详解

    这篇文章主要为大家详细介绍了Java文件操作中的序列化与对象处理流,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-09-09
  • 使用Java实现简单搭建内网穿透

    使用Java实现简单搭建内网穿透

    内网穿透是一种网络技术,适用于需要远程访问本地部署服务的场景,本文主要为大家介绍了如何使用Java实现简单搭建内网穿透,感兴趣的可以了解下
    2024-02-02
  • Java 泛型(Generic)简介及用法详解

    Java 泛型(Generic)简介及用法详解

    泛型是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型,参数化类型,把类型当作参数一样的传递,本文给大家介绍Java 泛型(Generic)概述及使用,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • springboot中@Async默认线程池导致OOM问题

    springboot中@Async默认线程池导致OOM问题

    这篇文章主要介绍了springboot中@Async默认线程池导致OOM问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06

最新评论