map 和 flatMap 的区别

StreamAPI 中的 map 方法,实现是一种映射关系。类似数学中的 x -> f(x)。

而 flatMap 方法是在 map 的基础上做了一次 flat。

相信看了下面的例子大家会有更加直观的理解:

java 复制代码
public static void main(String[] args) {
        List<Integer> list1 = Arrays.asList(1, 2, 3);
        List<Integer> list2 = Arrays.asList(4, 5, 6);
        List<Integer> list3 = Arrays.asList(7, 8, 9);

        List<List<Integer>> listOfList = new ArrayList<>();
        listOfList.add(list1);
        listOfList.add(list2);
        listOfList.add(list3);

        System.out.println("listOfList: " + listOfList);

        // map 实现给每个元素加 10,但还是保留原有的 List<List<Integer>> 结构
        List<List<Integer>> collect1 = listOfList.stream()
                .map(list -> list.stream().map(e -> e + 10).collect(Collectors.toList()))
                .collect(Collectors.toList());
        System.out.println("collect1: " + collect1);

        // flatMap 实现给每个元素加 10,并 flat 成 List<Integer> 结构
        List<Integer> collect2 = listOfList.stream().flatMap(list -> list.stream().map(e -> e + 10))
                .collect(Collectors.toList());
        System.out.println("collect2: " + collect2);
    }

输出结果:

shell 复制代码
listOfList: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
collect1: [[11, 12, 13], [14, 15, 16], [17, 18, 19]]
collect2: [11, 12, 13, 14, 15, 16, 17, 18, 19]
相关推荐
NE_STOP3 分钟前
SpringBoot--简单入门
java·spring
hqxstudying30 分钟前
Java创建型模式---原型模式
java·开发语言·设计模式·代码规范
Dcs1 小时前
VSCode等多款主流 IDE 爆出安全漏洞!插件“伪装认证”可执行恶意命令!
java
保持学习ing1 小时前
day1--项目搭建and内容管理模块
java·数据库·后端·docker·虚拟机
京东云开发者1 小时前
Java的SPI机制详解
java
超级小忍1 小时前
服务端向客户端主动推送数据的几种方法(Spring Boot 环境)
java·spring boot·后端
程序无bug2 小时前
Spring IoC注解式开发无敌详细(细节丰富)
java·后端
小莫分享2 小时前
Java Lombok 入门
java
程序无bug2 小时前
Spring 对于事务上的应用的详细说明
java·后端
食亨技术团队2 小时前
被忽略的 SAAS 生命线:操作日志有多重要
java·后端