在Java中,flatMap
和map
都是用于转换流中的元素的方法,但它们具有一些不同之处。
返回类型:map
方法将流中的每个元素映射到一个新的值,然后返回一个包含这些新值的流。而flatMap
方法将流中的每个元素映射到一个流,然后将这些流连接起来成为一个新的流。
扁平化:由于flatMap
会将元素映射为一个流,所以它可以用于将多个流合并成一个流。而map
只能进行一对一的元素映射。
举个例子,假设有一个包含多个字符串的流,我们想将每个字符串拆分成单个字符并返回一个包含这些字符的流。可以使用flatMap
方法将每个字符串映射为字符流,并将这些字符流合并成一个流。示例代码如下:
List<String> strings = List.of("Hello", "World");
// 使用flatMap将每个字符串映射为字符流,然后将这些字符流合并成一个流
List<Character> characters = strings.stream()
.flatMap(str -> str.chars().mapToObj(c -> (char) c))
.collect(Collectors.toList());
System.out.println(characters); // 输出: [H, e, l, l, o, W, o, r, l, d]
另一方面,如果我们只想将每个字符串转换为大写形式,可以使用map
方法将每个字符串映射为大写形式的字符串,并返回一个包含这些字符串的流。示例代码如下:
List<String> strings = List.of("Hello", "World");
// 使用map将每个字符串映射为大写形式的字符串
List<String> upperCaseStrings = strings.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(upperCaseStrings); // 输出: [HELLO, WORLD]
综上所述,flatMap
用于将多个流合并成一个流,而map
用于进行一对一的元素映射。