• java8中 map和flatmap的理解


    假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d"],
    对于这样的需求,我们可能想到的第一个版本可能是这样子的:

    words.stream()
    .map(word -> word.split(""))
    .distinct()
    .collect(toList());

    这个方法的问题在于,传递给map方法的Lambda为每个单词返回了一个String[](String
    列表)。因此, map 返回的流实际上是Stream<String[]> 类型的。你真正想要的是用
    Stream<String>来表示一个字符流。因此,这是行不通的。

    以下是我对这个问题的解法和分步写法,希望能对你有帮助:

     1  String ss = "Hello";
     2 
     3         String[] aa = ss.split("");
     4 
     5         String[] bb = {"H", "e", "l", "l", "o"};
     6 
     7 
     8         String[] strings = {"Hello", "World"};
     9 
    10         //Arrays.stream接收一个数组返回一个流
    11         List<Stream<String>> streamList = Arrays.asList(strings).stream().
    12                 map(str -> str.split("")).
    13                 map(str -> Arrays.stream(str)).
    14                 collect(Collectors.toList());
    15 
    16         //分步写(map)
    17 
    18         Stream<String[]> stream = Arrays.asList(strings).stream().
    19                 map(str -> str.split(""));
    20 
    21         Stream<Stream<String>> streamStream = stream.map(strings1 -> Arrays.stream(strings1));
    22         List<Stream<String>> streamList1 = streamStream.collect(Collectors.toList());
    23 
    24 
    25         List<String> stringList = Arrays.asList(strings).stream().
    26                 map(str -> str.split("")).
    27                 flatMap(str -> Arrays.stream(str))
    28                 .collect(Collectors.toList());
    29 
    30 
    31         //分步写(流只能消费一次)(flatMap)
    32         Stream<String[]> stream1 = Arrays.asList(strings).stream().
    33                 map(str -> str.split(""));
    34 
    35         Stream<String> stringStream = stream1.flatMap(strings1 -> Arrays.stream(strings1));
    36 
    37         List<String> stringList1 = stringStream.collect(Collectors.toList());

    对flatMap的说明:这个在这里的主要作用是对流进行扁平化
    最后给大家推荐一个专栏,http://gk.link/a/10fxp
  • 相关阅读:
    Javascript在使用import 与export 区别及使用
    【repost】Python正则表达式
    js常见算法
    【repost】 JS变量重复声明以及忽略var 声明的问题及其背后的原理
    【repost】javascript callback
    【repost】js window对象属性和方法相关资料整理
    Donald Knuth
    前端知识体系
    【repost】让你一句话理解闭包(简单易懂)
    【repost】图解Javascript上下文与作用域
  • 原文地址:https://www.cnblogs.com/java-le/p/7909729.html
Copyright © 2020-2023  润新知