区别:
map mapper返回R,flatMap mapper返回Stream<R>

官网解释

1,<R>Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper) 

Returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element.

2,<R>Stream<R> map(Function<? super T,? extends R> mapper)

Returns a stream consisting of the results of applying the given function to the elements of this stream.

map(Function f)

接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素,返回的数据还是一个流。

flatMap(Function f)

接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。

示例代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class MapFlatMap {
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
list1.add("A");
list1.add("B");
List<String> list2 = new ArrayList<>();
list2.add("C");
list2.add("D");

List<List<String>> list = new ArrayList<>();
list.add(list1);
list.add(list2);

System.out.println("----------对比举例------------");
        Stream stream1 = list.stream().map(i-> {
List<String> listT = new ArrayList<>();
i.stream().forEach(j->listT.add("map1>" + j));
return listT;
});
stream1.forEach(System.out::println);

System.out.println();

Stream stream2 = list.stream().flatMap(i->i.stream().map(j->"flatMap2>" + j));
stream2.forEach(System.out::println);

System.out.println("-----------单词合并-----------");
List<String> words = Arrays.asList("hello c++", "hello java", "hello python");
List<String> result = words.stream()
.map(word -> word.split(" ")) // 将单词按照空格切合,返回Stream<String[]>类型的数据
.flatMap(Arrays::stream) // 将Stream<String[]>转换为Stream<String>
.distinct() // 去重
.collect(Collectors.toList());
System.out.println(result);

}
}
输出:

----------对比举例------------
[map1>A, map1>B]
[map1>C, map1>D]

flatMap2>A
flatMap2>B
flatMap2>C
flatMap2>D
-----------单词合并-----------
[hello, c++, java, python]

java stream map和 flatmap区别的更多相关文章

  1. java8中stream的map和flatmap的理解

    转自https://blog.csdn.net/wynjauu/article/details/78741093 假如我们有这样一个需求给定单词列表["Hello","W ...

  2. map和flatmap的区别+理解、学习与使用 Java 中的 Optional

    转自:map和flatmap的区别 对于stream,   两者的输入都是stream的每一个元素,map的输出对应一个元素,必然是一个元素(null也是要返回),flatmap是0或者多个元素(为n ...

  3. java8Stream map和flatmap的区别

    map和flatmap的区别 map只是一维 1对1 的映射 而flatmap可以将一个2维的集合映射成一个一维,相当于他映射的深度比map深了一层 , 所以名称上就把map加了个flat 叫flat ...

  4. Stream之filter、distinct、skip、map、flatMap、match、find、reduce

    一.Stream之filter.distinct.skip: package com.cy.java8; import java.util.Arrays; import java.util.List; ...

  5. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  6. spark中map与flatMap的区别

    作为spark初学者对,一直对map与flatMap两个函数比较难以理解,这几天看了和写了不少例子,终于把它们搞清楚了 两者的区别主要在于action后得到的值 例子: import org.apac ...

  7. Optional和Stream的map与flatMap

    Optional的map和flatMap Optional存在map和flatMap方法.map源码如下 public<U> Optional<U> map(Function& ...

  8. Java Stream 使用详解

    Stream是 Java 8新增加的类,用来补充集合类. Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的. Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的 ...

  9. [源码解析] 当 Java Stream 遇见 Flink

    [源码解析] 当 Java Stream 遇见 Flink 目录 [源码解析] 当 Java Stream 遇见 Flink 0x00 摘要 0x01 领域 1.1 Flink 1.2 Java St ...

  10. 基础篇:JAVA.Stream函数,优雅的数据流操作

    前言 平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看.java提供了Stream的概念,它可以让我们把集合数据当做一个个元素在处理,并且提供多线程模式 流的创建 流的各种数 ...

随机推荐

  1. Window10上CLion极简配置教程

    Window10上CLion极简配置教程 1. 首先,下载安装CLion 去JB公司官网下载CLion,https://www.jetbrains.com/clion/download/#sectio ...

  2. BUU刷题记录

    [GWCTF 2019]mypassword xss+csp 打开页面可以注册登录 登进去提示不是sql注入 然后提示源码 看一下 然后有段后端代码写道了注释里 <!-- if(is_array ...

  3. ider git Reset Type 使用记录

    Soft:在选定提交点之后所做的所有更改都将被暂存(这意味着可以到 Version Control 窗口(Alt+9)的Local Changes 选项卡,以便您可以查看它们,并在必要时稍后提交). ...

  4. (python)json 格式文件

    Json 数据格式: python 的内置模块: json 格式数据声明只能有一层顶级层(字典格式,可以是任意对象,如字符串,列表等,但实际工作中一般为字典对象,) json 对象本质是一个字符串对象 ...

  5. NSQ(6)-nsq相关策略

    1:nsq的流量控制 RDY 消息中间件的实现无非两种套路,一种让客户端pull,典型的比如kafka便是如此,而另一种则是push,也就是让客户端不需要做任何操作,只需要做好conn便可以源源不断收 ...

  6. elasticsearch组件

    elasticsearch组件 Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据. 它被用作全文检索.结构化搜索.分析以及这三个功能的组合 E ...

  7. 第一个helloworld程序

    ; hello.asm section .data msg db "hello, world",13,10,0 section .bss section .text global ...

  8. jdk 13 添加 jre

    问题: 安装 jdk 13 版本后发现没有 jre . 解决方法: 1.进入 jdk 安装目录(如:D:\Program\Java\jdk-13.0.2\) 2.在 jdk 安装目录打开命令行,输入以 ...

  9. centos7.2下配置DNS服务器

    https://baijiahao.baidu.com/s?id=1748980460185046641&wfr=spider&for=pc 1.安装bind(服务器) yum -y ...

  10. 蓝桥杯训练赛二-问题 A

    题目描述 用简单素数筛选法求N以内的素数. 输入 N 输出 2-N的素数 样例输入 100 样例输出 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 ...