在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
用于進行一對一的元素映射。