[java]Stream API——map和flatMap的区别

map方法

   map的含义为映射。是指对于Stream中包含的每一个元素使用给定的转换函数进行转换。

   map传入的Lambda表达式必须是Function实例,参数可以为任意类型,而其返回值也是任性类型,javac会根据实际情景自行推断。

flatMap方法

   flatMap的含义为平铺映射。flatMap方法与map方法类似,都是将原Stream中的每一个元素通过转换函数转换。不同的是,flatMap是对结果进行平铺。

   flatMap传入的Lambda表达式必须是Function实例,参数可以为任意类型,而其返回值类型必须是一个Stream。

示例

public static Stream<Character> characterStream(String s){
        List<Character> result = new ArrayList<>();
        for (char c : s.toCharArray())
            result.add(c);
        return result.stream();
    }
    
String w = "your name";
Stream
<Stream<Character>> mapResult = words.map(w -> characterStream(w)); Stream<Character> flatMapResult = words.flatMap(w -> characterStream(w));

map的结果mapResult:[ ...['y', 'o', 'u', 'r'], ['n', 'a', 'm', 'e']]

faltMap的结果flatMapResult:['y', 'o', 'u', 'r', 'n', 'a', 'm', 'e']

原文地址:https://www.cnblogs.com/vickylinj/p/9489230.html