美文网首页
浅谈Java8新特性之Stream--Map和FlatMap的区

浅谈Java8新特性之Stream--Map和FlatMap的区

作者: 雪山之王 | 来源:发表于2019-03-02 20:19 被阅读0次

    Eg:将Stream集合中的语句进行单词拆分,然后去重Stream<String>testStream= Stream.of("hello welcome","world hello","hello world","hello world welcome");

    map方法是将指定的Stream中元素进行“平级”处理,每个元素转化为各自所对应的一个Stream集合,输入与输出是一对一的关系,若进一步获取各个子Stream中的元素,还需要逐个遍历子集合

    得到的Stream中的元素与原Stream中的元素是“父子关系”


    Eg:将下面String Stream中的字符串通过空格Split获取单次,并对所有单词去重

    Stream<String>testStream= Stream.of("hello welcome","world hello","hello world","hello world welcome");

    (1)通过Map方法:testStream.map(str-> Arrays.stream(str.split(" ")))

    得到的将是四个数组:

    java.util.stream.ReferencePipeline$Head@816f27d

    java.util.stream.ReferencePipeline$Head@87aac27

    java.util.stream.ReferencePipeline$Head@3e3abc88

    java.util.stream.ReferencePipeline$Head@6ce253f1

    (2)第一个总的集合List

        List<String>totalList=newArrayList<String>();

    (3)要遍历切割完成数组里的所有的单词,需要再逐个遍历其中数组,将所有子集合中的元素合并到一个集合中,也就是要进行切割并获取所有单词的总集合,需要对Map需要进行两层遍历:

    testStream.map(str-> Arrays.stream(str.split(" "))).forEach(strStream->strStream.forEach(s->totalList.add(s)));

    (4)再次遍历totalList

    totalList.stream().distinct().forEach(System.out::println);

    flatMap将原有Stream中的元素进行转化为新的子Stream集合,同时对子Stream中的元素进行“跨级”处理,原有的Stream通过一次flatMap之后得到的不是各个子Stream的集合,

    而是各个子Steam集合中的元素的总集合,也就是对各个子Stream结合进行二次遍历取出中的元素,融合到一个总集合中

    得到的Stream中的元素与原Stream中的元素是“祖孙关系”


    Eg:将下面String Stream中的字符串通过空格Split获取单次,并对所有单词去重

    Stream<String>testStream= Stream.of("hello welcome","world hello","hello world","hello world welcome");

    (1)通过flatMap方法:testStream.flatMap(str-> Arrays.stream(str.split(" ")))

    得到的将是一堆单词的集合:直接将各个子Stream中的元素flat到一起,所有的元素拥有同一个“祖父”

    Stream【hello,welcome,world,hello,hello,world,hello,world,welcome】

    (2)直接对新得到的Stream去重即可

    testStream.flatMap(str-> Arrays.stream(str.split(" "))).distinct().forEach(System.out::println);

    相关文章

      网友评论

          本文标题:浅谈Java8新特性之Stream--Map和FlatMap的区

          本文链接:https://www.haomeiwen.com/subject/auryuqtx.html