电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java中stream處理中map與flatMap的比較和使用案例

瀏覽:91日期:2022-08-15 13:02:04
前言

使用Java8的新特性Stream流式處理,可以提高對于集合的一些操作效率,再配合lambda表達式,可以極致的簡化代碼,尤其還有并行流這個東東,可以去 了解一下,在一些場合還是可以提高效率的,而且編碼起來也不費事。

并且流式處理的核心就是一個淺拷貝和引用管道,其內部實現了一個引用管道ReferencePipeline, 他把需要處理的數據的引用拷貝了一份,然后處理數據,最后收集結果也是將這些引用放到了另一個集合中。

今天要講的就是stream處理中的map和flatMap這倆個的比較和使用

共同點和區別

首先看一下源代碼

<R> Stream<R> map(Function<? super T, ? extends R> mapper); <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);共同點 都是依賴stream進行轉換,結合lambda的入參和返回值,將一個類型依據程序邏輯轉換成另一種類型。 最后結果返回都還是一個流,還可以對其進行繼續的流式處理或者進行收集。 區別 方法參數不同,第一個參數是一樣的,但是第二個不一樣,對于map第二個參數沒啥要求,但是使用flatMap時,第二個參數還得用流來接收。 所以flatMap多用于多對多,一對多,也就是map是將一個數據流中的一個數據節點,映射成另外一個數據節點,而flatMap是將一個數據流中的一個數據節點映射成另外一個數據流,這個另外的數據流可以是一個數據節點也可以是多個數據節點。 flatmap既可以單一轉換也可以一對多/多對多轉換,flatmap要求返回Observable,因此可以再內部進行from/just的再次事件分發,一一取出單一對象(轉換對象的能力不同)使用案例

比如我們使用map將一個per對象映射成一個字符串對象

static class Per { public String name; public int age; public Per(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return 'Per{' + 'name=’' + name + ’’’ + ', age=' + age + ’}’; } } public static void main(String[] args) { List<Per> list = new ArrayList<>(); list.add(new Per('listen', 22)); list.add(new Per('bike', 24)); list.add(new Per('milk', 27)); List<String> collect = list.stream().map(Per::toString).collect(Collectors.toList()); System.out.println(list); System.out.println('---'); System.out.println(collect); }

一對一可以實現,那我們該需求,假設一個per人有多個孩子,我們想獲取這多個孩子,使用map可以實現嗎?比如下面代碼。

static class Child { public String name; public int age; public Child(String name, int age) { this.name = name; this.age = age; }@Override public String toString() { return 'Child{' + 'name=’' + name + ’’’ + ', age=' + age + ’}’; } } static class Per { public String name; public int age; public Child[] Children; public Per(String name, int age) { this.name = name; this.age = age; } public Child[] getChildren() { return Children; } public void setChildren(Child[] children) { Children = children; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return 'Per{' + 'name=’' + name + ’’’ + ', age=' + age + ’}’; } }

這個時候注意這個孩子是多個,我們用的是數組存儲。如果此時我們還用map,那么只能接受每個per的孩子數組,不能和我們所愿接受每個孩子。

public static void main(String[] args) { List<Per> list = new ArrayList<>(); Per per1 = new Per('Listen', 22); per1.setChildren(new Child[] {new Child('a', 1), new Child('b', 2)}); Per per2 = new Per('Milk', 26); per2.setChildren(new Child[] {new Child('c', 1), new Child('d', 2)}); list.add(per1); list.add(per2); List<Child[]> collect = list.stream().map(Per::getChildren).collect(Collectors.toList()); collect.forEach(item -> System.out.println(Arrays.toString(item))); }

而使用flatMap就可以實現。

public static void main(String[] args) { List<Per> list = new ArrayList<>(); Per per1 = new Per('Listen', 22); per1.setChildren(new Child[] {new Child('a', 1), new Child('b', 2)}); Per per2 = new Per('Milk', 26); per2.setChildren(new Child[] {new Child('c', 1), new Child('d', 2)}); list.add(per1); list.add(per2); List<Child> collect = list.stream().flatMap(item -> Arrays.stream(item.getChildren())).collect(Collectors.toList()); System.out.println(collect); }

到此這篇關于Java中stream處理中map與flatMap的比較和使用案例的文章就介紹到這了,更多相關Java map與flatMap內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 | 塑料托盘厂家直销-吹塑托盘生产厂家-力库塑业【官网】 | 温州富欧金属封头-不锈钢封头厂家 | 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | 庭院灯_太阳能景观灯_草坪灯厂家_仿古壁灯-重庆恒投科技 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 商标转让-商标注册-商标查询-软著专利服务平台 - 赣江万网 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 厌氧工作站-通用型厌氧工作站-上海胜秋科学仪器有限公司 | 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 中山市派格家具有限公司【官网】 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 电抗器-能曼电气-电抗器专业制造商 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 不锈钢水箱生产厂家_消防水箱生产厂家-河南联固供水设备有限公司 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 废气处理设备-工业除尘器-RTO-RCO-蓄热式焚烧炉厂家-江苏天达环保设备有限公司 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 不锈钢水箱厂家,不锈钢保温水箱-山东桑特供水设备 | 宁夏档案密集柜,智能密集柜,电动手摇密集柜-盛隆柜业宁夏档案密集柜厂家 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 深圳市八百通智能技术有限公司官方网站| 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 石家庄装修设计_室内家装设计_别墅装饰装修公司-石家庄金舍装饰官网 | 一路商机网-品牌招商加盟优选平台-加盟店排行榜平台 | 京港视通报道-质量走进大江南北-京港视通传媒[北京]有限公司 | 杰恒蠕动泵-蠕动泵专业厂家-19年专注蠕动泵 | 立式硫化罐-劳保用品硫化罐-厂家直销-山东鑫泰鑫硫化罐厂家 | 润东方环保空调,冷风机,厂房车间降温设备-20年深圳环保空调生产厂家 | 便携式高压氧舱-微压氧舱-核生化洗消系统-公众洗消站-洗消帐篷-北京利盟救援 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | LED灯杆屏_LED广告机_户外LED广告机_智慧灯杆_智慧路灯-太龙智显科技(深圳)有限公司 | ORP控制器_ORP电极价格-上优泰百科| 江苏全风,高压风机,全风环保风机,全风环形高压风机,防爆高压风机厂家-江苏全风环保科技有限公司(官网) | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 |