当前位置: 代码迷 >> 综合 >> 【Java8系列】flatMap
  详细解决方案

【Java8系列】flatMap

热度:85   发布时间:2023-12-16 03:26:47.0

???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

img

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。???

?? 欢迎订阅本专栏 ??

博客目录

    • 一.介绍
    • 二.使用

一.介绍

flatMap() 是一个在 Java 8 中引入的方法,它可以将一个流中的每个元素都映射到另一个流中,并将这些流连接起来形成一个新的流。具体而言,flatMap() 操作将多个子流合并成一个流。

比如说,我们有一个字符串列表 List<String>,我们想要将其中每个字符串分割成单词,并将这些单词放在同一个流中,那么可以使用 flatMap() 方法:

List<String> words = Arrays.asList("Hello", "World");
List<String> allWords = words.stream().flatMap(str -> Arrays.stream(str.split(" "))).collect(Collectors.toList());

在上面的例子中,我们首先创建了一个包含两个字符串的列表 words。然后我们调用 stream() 方法将列表转换为一个流。接着我们使用 flatMap() 方法和 Arrays.stream() 方法将每个字符串分割成单词,并将这些单词放在同一个流中。最后我们调用 collect() 方法将所有的单词收集到一个新的列表中。

注意:flatMap() 方法返回的是一个扁平化后的流,因此如果每个元素映射出来的子流中还有嵌套的流,那么最终结果就会是一个扁平化后的流,而不是一个嵌套的流。

二.使用

对给定单词列表 [“Hello”,“World”],你想返回列表[“H”,“e”,“l”,“o”,“W”,“r”,“d”]

使用 flatMap 方法的效果是,各个数组并不是分别映射一个流,而是映射成流的内容,所有使用 map(Array::stream)时生成的单个流被合并起来,即扁平化为一个流

@Test
public void test9() {
    //要做的操作是获取这些数据中长度大于2的单词个数List<List<String>> lists = new ArrayList<>();lists.add(Arrays.asList("apple", "click"));lists.add(Arrays.asList("boss", "dig", "qq", "vivo"));lists.add(Arrays.asList("c#", "biezhi"));long count = lists.stream().flatMap(Collection::stream).filter(str -> str.length() > 2).count();System.out.println(count);
}@Test
public void test99() {
    String[] words = new String[]{
    "Hello","World"};List<String> a = Arrays.stream(words).map(word -> word.split("")).flatMap(Arrays::stream) //合并为一个扁平流.distinct().collect(toList());a.forEach(System.out::print);
}

??????本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!???

???如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!? ? ?

???Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!???

img

  相关解决方案