JAVA8 中的flatmap

JAVA8 中的flatmap构建对象classUser{privateStringaddr}将多个User集合中的addr按照;分割合并成一个字符串listList<User>uList=Lists.newArrayList();Useru1=newUser();u1.setAddr(“a1;a2;a3;a4;a5”);…

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

构建对象

class User{
 private   String addr
}

将多个User集合中的addr按照;分割合并成一个字符串list

  List<User> uList = Lists.newArrayList();
        User u1 = new User();
        u1.setAddr("a1;a2;a3;a4;a5");

        User u2 = new User();
        u2.setAddr("b1;b2;b3;b4;b5");

        uList.add(a);
        uList.add(b);

        List<String> addrList = uList.stream().map(x -> x.getAddr()).flatMap(x->Arrays.stream(x.split(";"))).collect(Collectors.toList());
        //或者
        List<String> ridStrList = uList.stream().map(x -> x.getAddr()).map(x -> x.split(";")).flatMap(Arrays::stream).collect(Collectors.toList());
        System.out.println(addrList);

说明:

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

案例:对给定单词列表 [“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 中的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 中的flatmap

    

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

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

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


相关推荐

  • 如何配置jdk1.6环境变量_环境变量是什么

    如何配置jdk1.6环境变量_环境变量是什么JAVA 环境变量(JDK)配置(root+普通用户)+附赠jdk包

    2022年4月21日
    97
  • C语言求最大公约数和最小公倍数(思路清晰+拓展)[通俗易懂]

    C语言求最大公约数和最小公倍数(思路清晰+拓展)[通俗易懂]最大公约数的求法首先了解它的一般求法(欧几里得算法):假设存在两个数A和B,假如A%B的结果不为0,那么A和B的最大公约数是B与A%B的最大公约数,一直往下计算,直到后者为0,此时的最大公约数为A’(注意不是A而是A’)。就比如上边的例子,当A%B==0的时候,最大公约数就是B了,这个A’就代表B。最大公约数的代码:(基于C++实现的函数)intgcd(inta,intb){ in…

    2022年5月16日
    53
  • intellij idea和eclipse比较_eclipse与idea的区别

    intellij idea和eclipse比较_eclipse与idea的区别             【总结】IDEA和Eclipse的比较    两个开发编辑器,可以说Eclispe之前占据了上风,但近几年来IDEA的使用率猛扑直追,现在IDEA有着反超的气势,到底两者之间有什么相似之处,又有什么区别呢?我们来看一下~~。   一、快捷键比较快捷键 Eclipse IDEA 查找类名 CTRL+…

    2022年8月26日
    9
  • 事务日志还原的次意外的操作失误

    事务日志还原的次意外的操作失误

    2021年11月25日
    53
  • RPC是什么? (学习笔记)

    RPC是什么? (学习笔记)什么是RPC?RPC全称RemoteProcedureCall,即远程过程调用,就是要像调用本地的函数一样去调远程函数,屏蔽远程调用的复杂性。为什么需要RPC?微服务、分布式应用的开发越来越

    2022年8月3日
    12
  • Excel 宏编程-使用excel宏编写第一个Hello World程序实例演示!

    Excel 宏编程-使用excel宏编写第一个Hello World程序实例演示!先看大屏幕,我要演示的效果就是点击hello按钮,运行我们的宏,输出HelloWorld!第一步首先进入开发工具页签,点击宏,创建一个的宏,我起的名字是hello,点击创建。没有开发工具页签的自行百度。第二步进入了编程界面,我们在中间输入MsgBox(“HelloWorld!”),代表弹出窗口显示里面的内容。第三步写完了我们先保存一下,会弹出一个对话框说让你是否继续保存为xls或xlsx类型,但是没法使用宏,所以点击否然后选择类型为xlsm类型后保存即可。

    2022年6月13日
    44

发表回复

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

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