📅  最后修改于: 2023-12-03 14:42:16.290000             🧑  作者: Mango
Java Stream
中 map()
和 flatMap()
的区别在 Java 8
中,Stream
提供了 map()
和 flatMap()
这两个用于对 Stream
中的元素进行操作的方法。虽然这两者的名字相似,但是它们的用法和功能有很大的差别。
map()
map()
方法接收一个 Function
做为参数,该 Function
将会应用到 Stream
中的每一个元素上。它返回一个新的 Stream
对象,该对象包含了将该 Function
应用到原始 Stream
中所有元素后生成的结果。
下面是一个简单的使用 map()
对 Stream
中每一个元素应用 toUpperCase()
方法的示例:
List<String> words = Arrays.asList("hello", "world");
List<String> capitalizedWords = words.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(capitalizedWords); // 输出 [HELLO, WORLD]
在上面的示例中,map()
方法将 toUpperCase()
应用到了 Stream
中的每一个元素上,返回了一个包含了所有大写单词的新 Stream
。
flatMap()
flatMap()
方法也接收一个 Function
做为参数,该 Function
将会应用到 Stream
中的每一个元素上,但是该 Function
的返回值是一个 Stream
对象。flatMap()
方法会将所有生成的 Stream
里的元素组合到一个新的 Stream
中。
下面是一个简单的使用 flatMap()
将多个 List
合并成一个 Stream
的示例:
List<List<String>> wordLists = Arrays.asList(
Arrays.asList("hello"),
Arrays.asList("world", "from"),
Arrays.asList("Java", "Stream")
);
List<String> words = wordLists.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println(words); // 输出 [hello, world, from, Java, Stream]
上面的示例中,flatMap()
方法将多个 List
中的元素合并到一个新的 Stream
中,并返回了包含了所有单词的新 Stream
。
简单来说,map()
方法用于将原始 Stream
中的每一个元素进行转换,返回一个新的 Stream
。而 flatMap()
方法则是将原始 Stream
中的每一个元素进行转换,并将返回的多个 Stream
合并到一个新的 Stream
中。