在Java中,flatMap
和map
都是用于轉(zhuǎn)換流中的元素的方法,但它們具有一些不同之處。
返回類(lèi)型:map
方法將流中的每個(gè)元素映射到一個(gè)新的值,然后返回一個(gè)包含這些新值的流。而flatMap
方法將流中的每個(gè)元素映射到一個(gè)流,然后將這些流連接起來(lái)成為一個(gè)新的流。
扁平化:由于flatMap
會(huì)將元素映射為一個(gè)流,所以它可以用于將多個(gè)流合并成一個(gè)流。而map
只能進(jìn)行一對(duì)一的元素映射。
舉個(gè)例子,假設(shè)有一個(gè)包含多個(gè)字符串的流,我們想將每個(gè)字符串拆分成單個(gè)字符并返回一個(gè)包含這些字符的流。可以使用flatMap
方法將每個(gè)字符串映射為字符流,并將這些字符流合并成一個(gè)流。示例代碼如下:
List<String> strings = List.of("Hello", "World");
// 使用flatMap將每個(gè)字符串映射為字符流,然后將這些字符流合并成一個(gè)流
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]
另一方面,如果我們只想將每個(gè)字符串轉(zhuǎn)換為大寫(xiě)形式,可以使用map
方法將每個(gè)字符串映射為大寫(xiě)形式的字符串,并返回一個(gè)包含這些字符串的流。示例代碼如下:
List<String> strings = List.of("Hello", "World");
// 使用map將每個(gè)字符串映射為大寫(xiě)形式的字符串
List<String> upperCaseStrings = strings.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(upperCaseStrings); // 輸出: [HELLO, WORLD]
綜上所述,flatMap
用于將多個(gè)流合并成一個(gè)流,而map
用于進(jìn)行一對(duì)一的元素映射。