zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    最长双回文串
    BUUOJ misc 二维码
    HDU 1284 钱币兑换问题 (动态规划 背包方案数)
    HDU 1260 Tickets (动态规划)
    HDU 1231 最大连续子序列 (动态规划)
    HDU 1203 I NEED A OFFER! (动态规划、01背包、概率)
    BUUOJ reverse SimpleRev (爆破)
    BUUOJ reverse 不一样的flag
    HDU 1176 免费馅饼 (动态规划、另类数塔)
    HDU 1171 Big Event in HDU (动态规划、01背包)
  • 原文地址:https://www.cnblogs.com/java-le/p/7909729.html
Copyright © 2011-2022 走看看