[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']