JAVA8 - flatMap

佚名 / 2024-01-18 / 原文

将一个单词列表如:["hello","world"] 拆分位一个字符列表返回如:["h","e",.......]

前置:

public static void test1(){
    String[] words = {"hello", "world"};
    Stream<String> stream = Arrays.stream(words);
}

实现:

package com.datastructure.binarytree.btree;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Test3 {

    public static void main(String[] args) {
        List<String> words = Arrays.asList("Hello", "world");

        //错误实现方式:
        List<Stream<String>> collect1 = words.stream().
                map(word -> word.split("")).
                map(Arrays::stream).collect(Collectors.toList());
        System.out.println(collect1); //out: [java.util.stream.ReferencePipeline$Head@4dd8dc3, java.util.stream.ReferencePipeline$Head@6d03e736]


        //right
        List<String> collect2 = words.stream().map(word -> word.split(""))
                .flatMap(Arrays::stream)  //返回:Stream<String[]>
                .collect(Collectors.toList());

        System.out.println(collect2); //out: [H, e, l, l, o, w, o, r, l, d]

    }
}