java8 stream流操作的flatMap(流的扁平化)

java8 stream流操作的flatMap(流的扁平化)flatMap的用法和含义住要通过一个案例来讲解,案例:对给定单词列表["Hello","World"],你想返回列表["H","e","l","o","W","r","d"]第一种方式String[]words=newString[]{"Hello","World&quot

大家好,又见面了,我是你们的朋友全栈君。

flatMap的用法和含义住要通过一个案例来讲解,

案例:对给定单词列表 [“Hello”,”World”],你想返回列表[“H”,”e”,”l”,”o”,”W”,”r”,”d”]

第一种方式

        String[] words = new String[]{"Hello","World"};
        List<String[]> a = Arrays.stream(words)
                .map(word -> word.split(""))
                .distinct()
                .collect(toList());
        a.forEach(System.out::print);

       代码输出为:[Ljava.lang.String;@12edcd21[Ljava.lang.String;@34c45dca 

                            (返回一个包含两个String[]的list)

        这个实现方式是由问题的,传递给map方法的lambda为每个单词生成了一个String[](String列表)。因此,map返回的流实际上是Stream<String[]> 类型的。你真正想要的是用Stream<String>来表示一个字符串。

        下方图是上方代码stream的运行流程

java8 stream流操作的flatMap(流的扁平化)

第二种方式:flatMap(对流扁平化处理)

        String[] words = new String[]{"Hello","World"};
        List<String> a = Arrays.stream(words)
                .map(word -> word.split(""))
                .flatMap(Arrays::stream)
                .distinct()
                .collect(toList());
        a.forEach(System.out::print);

结果输出:HeloWrd

        使用flatMap方法的效果是,各个数组并不是分别映射一个流,而是映射成流的内容,所有使用map(Array::stream)时生成的单个流被合并起来,即扁平化为一个流。

    下图是运用flatMap的stream运行流程,

java8 stream流操作的flatMap(流的扁平化)

    

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137373.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicat15for激活码-激活码分享

    (navicat15for激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    231
  • Zuul网关_vue动态路由和静态路由的区别

    Zuul网关_vue动态路由和静态路由的区别1.微服务架构所面临的问题?1)针对某个功能,客户端在微服务架构的情况下需要请求多个模块接口2)针对于身份认证、日志、流量控制等公共模块每个微服务都需要做一遍,不利于业务与非业务的拆分针对于这些问题,Zuul可完美解决,我们可用Zuul做:1)客户端只需要知道网关而不需要知道具体模块的地址,所有服务由网关对外提供2)身份认证类…

    2022年8月15日
    2
  • 常用的css文件_css常用的三种选择器

    常用的css文件_css常用的三种选择器reset.css(几乎每个项目都要引入的css)@charset"utf-8";html{background-color:#fff;color:#000;font-size

    2022年8月1日
    1
  • plc的移位指令C语言实现,PLC中使用移位指令是如何实现移位动作的

    plc的移位指令C语言实现,PLC中使用移位指令是如何实现移位动作的plc移位指令怎么么用楼主的意思大约是用X2来检测有没有罐子,X1用来定位灌装位置,现在需要把检测罐子的X2位置,移动到灌装位置的前面,应该是提供图片的下面的那种应用吧,这种应用的思路其实主要是要记录下到灌装工位时是否有罐子,程序在图片里面,假设开机前X1和X2之间没有罐子开机后传送带运转当X1检测到应该有罐子的工位来到罐装工位时,首先将检测罐子有无的X2的状态放入M3中,有罐子M3为1,没罐子M…

    2022年5月1日
    60
  • jax-ws使用教程_JAX-WS教程

    jax-ws使用教程_JAX-WS教程jax-ws使用教程WelcometoJAX-WSTutorial.WebServicesworkonclient-servermodelwheretheycommunicateoverthenetwork.ServersidecomponentprovidestheendpointURLwhereserviceislocatedandcli…

    2022年7月15日
    16
  • oracle字符串补齐_oracle去掉字符串后几位

    oracle字符串补齐_oracle去掉字符串后几位一、拼接字符串1、使用“||”来拼接字符串:select’拼接’||’字符串’asStrfromstudent;2、使用concat(param1,param2)函数实现:selectconcat(‘拼接’,’字符串’)asStrfromstudent;注:oracle的concat()方法只支持两个参数,如果拼接多个参数,可以嵌套concat():selectconcat(…

    2022年9月20日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号