java8 stream中map与flatMap的区别

flatMap与map的区别在于* flatMap是将一个流中的每个值都转成一个个流,然后再将这些流扁平化成为一个流 。举例如下:

String[] strs = {“java8”, “is”, “easy”, “to”, “use”};
List distinctStrs = Arrays.stream(strs)
                                .map(str -> str.split(""))  // 映射成为Stream
                                .distinct()
                                .collect(Collectors.toList());

在执行map操作以后,我们得到是一个包含多个字符串(构成一个字符串的字符数组)的流,此时执行distinct操作是基于在这些字符串数组之间的对比,所以达不到我们希望的目的,此时的输出为:
[j, a, v, a, 8]
[i, s]
[e, a, s, y]
[t, o]
[u, s, e]


List distinctStrs = Arrays.stream(strs)
                                .map(str -> str.split(""))  // 映射成为Stream
                                .flatMap(Arrays::stream)  // 扁平化为Stream
                                .distinct()
                                .collect(Collectors.toList());

结果正确

flatMap将由map映射得到的Stream,转换成由各个字符串数组映射成的流Stream,再将这些小的流扁平化成为一个由所有字符串构成的大流Steam,从而能够达到我们的目的。

 

你可能感兴趣的:(JDK8,jdk8,map与flatMap区别)