后台栈管理面试经常会问Java8map和flatMap的区别,大部分人答不上来,知道map怎么用的人不多,有的人甚至不知道这两个东西是干什么用的,有人以为我问的是HashMap和FlatMap。.这里说的map和flatMap都不是集合,都是Stream流接口中的方法。如果你没用过,估计在座的各位有点头晕,所以今天stackleader给大家来个盲扫,用实际案例来分析一下这两个东西,让你在使用过程中不再害怕提问面试!如图:Java8Stream(流)接口中有8个特别有意思的方法,其实分为两类:mapflatMap现在知道这两个东西的由来了吧?!其中,xxToXxx被转换为不同类型的流。另外,之前写过Stream系列的专题,这里就不展开了。不懂的可以关注公众号Java技术栈,然后在公众号Java教程菜单中阅读。mapmap方法的作用:转换流中的每一个元素。例如,现在有一个List\集合:privatestaticListLIST=Arrays.asList("https://","www",".","javastack",".","cn");我想在每个元素后面加上“---”:/***mapconversion*@author:stacklength*@from:公众号Java技术栈*/privatestaticvoidmap(){ListmapList=LIST.stream().map(e->e.concat("---")).collect(Collectors.toList());mapList.forEach(System.out::print);System.out.println("\n地图列表大小:"+mapList.size());System.out.println();}1)先将List转换为Stream;2)调用Stream.map方法对Stream中的每一个元素进行重新包装;3)将Stream\转换为List;outputresult:=====maplist=====https://---www---.---javastac...maplistsize:6结果符合预期。另外我也把Java8的知识点整理成小程序,面试的时候经常考。可以使用Java面试库小程序在线写题。如果List中的元素都是整数类型:privatestaticListNUMBERS_LIST=Arrays.asList("22","19","89","90");那么就可以直接使用内置的mapToXxx方法,这里用mapToLong做Demo:out.println("=====映射到长列表=====");ListlongList=NUM??BERS_LIST.stream().mapToLong(Long::valueOf).boxed().collect(Collectors.toList());longList.forEach(System.out::println);System.out.println("映射到长列表大小:"+longList.size());System.out.println();}1)先将List转为Stream;2)调用Stream.mapToLong方法将stream转换为LongStream类型;3)调用LongStream.boxed方法采集为Stream\类型;4)将Stream\转换为List;outputresult:=====maptolonglist=====22198990maptolonglistsize:4当然这个也可以用map来实现,但是用mapToXxx可以把原来的流(Stream)转换成XxxStream:XxxStream可以有更多基于整数的功能,比如快速处理元素求和(sum)、求最大数(max)、最小数(min)等,如果涉及到元素计算,用mapToXxx会更香。如源码所示:Streammap(Functionmapper);LongStreammapToLong(ToLongFunction映射器);map和mapToXxx的返回类型不同。本文所有完整示例源码已上传:https://github.com/javastacks...flatMapflatMap方法的作用:flat的意思是展平,flatMap是将流中的每个元素展平,形成多个流例如,现在有3个字符串数组:String[]arr1={"https://","www",".","javastack",".","cn"};String[]arr2={"公众号",":","JavaTechnologyStack"};String[]arr3={"Author",":","StackLength"};现在直接转换成Stream:System.out.println("=====arrayslist=====");Listlist=Stream.of(arr1,arr2,arr3).collect(Collectors.toList());list.forEach(System.out::print);System.out.println("\narrayslistsize:"+list.size());System.out.println();结果输出:=====arrayslist=====[Ljava.lang.String;@21b8d17c[Ljava.lang.String;@6433a2[Ljava.lang.String;@5910e440arrayslistsize:3是的,是3个数组元素.下面看看使用flatMap方法的效果:System.out.println("=====flatmaplist=====");ListmapList=list.stream().flatMap(Arrays::溪流)。collect(Collectors.toList());mapList.forEach(System.out::print);System.out.println("\nflatmaplistsize:"+mapList.size());System.out.println();结果输出:=====flatmaplist=====https://www.javastack.cn公众号:Java技术栈作者:栈长flatmap列表大小:12个元素大小变成12个,3中的元素数组流全部平铺成一个流,然后流中一共有12个元素。我这里用的数组类型如果是多个List\类型也是可以的,它的底层也是数组,只要能把元素转成流就可以了。总结一下,map是对stream元素进行转换,flatMap是对stream中的元素(数组)进行压平合并,即将stream中的每个元素压平后转为Stream流。我们看下面两个方法的源码:Streammap(Functionmapper);StreamflatMap(Function>映射器);参数不同,map前后各元素都是R类型,flatMap前后各元素由原来的R类型改为Stream类型。简单总结一下:map适合各个元素的简单转换,flatMap适合数组流的扁平化和合并。两种方式的应用场景不同。那么,你失学了吗?赶快在项目中使用起来,提升你的硬实力,让同事对你刮目相看!又啰嗦了一句,不知道Java8新知识点怎么用的可以关注公众号:Java技术栈,后台回复:java,我写了一堆Java8+系列教程。本文所有完整示例源码均已上传:https://github.com/javastacks...欢迎Star学习,这??里将提供以下Java示例!好了,今天的分享就到这里。稍后栈长会分享更多有趣的Java技术和最新的技术资料。关注公众号Java技术栈第一时间推送。我也会分享主流的Java面试题和参考答案。全部搞定后在公众号后台回复关键词“面试”刷题。最后,如果觉得我的文章对你有用,动动你的小手,送给正在看的人,转发吧,原创不易,楼主需要你的鼓励。版权声明:本文为公众号《Java技术栈》原创,原创不易,转载或引用本文内容请注明出处,抄袭者一律举报+投诉,并保留追究权利法律责任。近期热点文章推荐:1.1,000+Java面试题及答案(2021最新版)2.别在满屏的if/else中,试试策略模式,真的很好吃!!3.操!Java中xx≠null的新语法是什么?4、SpringBoot2.6正式发布,一大波新特性。.5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!