java flatmap

作者:原创时间:2022-03-30
文档

很多朋友都想知道java flatmap的作用有哪些?下面就一起来了解一下吧~

构建对象

class User{
 private   String addr
}

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

  List 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 addrList = uList.stream().map(x -> x.getAddr()).flatMap(x->Arrays.stream(x.split(";"))).collect(Collectors.toList());
        //或者
        List 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 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 类型的。想要的是用Stream来表示一个字符串。

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

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

  String[] words = new String[]{"Hello","World"};
        List 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运行流程,

以上就是小编今天的分享,希望能够帮到大家。

显示全文
java dowhile java flink java drools java dto java dynamic java flume java ear java foreach循环 java fork java ecc加密 java formatter java echarts java ehcache java email java empty java encapsulation java future java generator java enhancer java generic java findfirst java fileinputstream java file.exists() java dockerfile java field获取值 java field java divide java feign java fastjson java dict java development java fastdfs java dev java dependency java调用asmx接口 java delete java获取绝对值 java调用c++ java调用c++接口 java delegate