日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:152日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产伦一区二区三区| 成人一区而且| 欧美精品羞羞答答| 国产成人免费| 国产suv精品一区二区四区视频| 国产精品xxx| 欧美激情一区| 老司机精品视频网| 国产+成+人+亚洲欧洲在线| 成人一区而且| 成人羞羞在线观看网站| 免费在线小视频| 成人日韩在线观看| 亚洲电影有码| 91九色精品国产一区二区| 亚洲在线免费| 日本91福利区| 久久久久九九精品影院| 精品视频一区二区三区四区五区 | 亚洲小说春色综合另类电影| 一区二区国产在线观看| 日韩激情视频网站| 国产日韩1区| 精品国产精品久久一区免费式| 日韩大片免费观看| 亚洲精品一区二区妖精| 热久久久久久久| 日韩高清成人在线| 精品欧美日韩精品| 一区二区小说| 亚洲精品综合| 精品国内亚洲2022精品成人| 婷婷成人在线| 日韩一区二区三免费高清在线观看 | 国产亚洲欧美日韩在线观看一区二区| 亚洲精品在线观看91| 一区二区国产精品| 国产精品videossex| 欧洲av一区二区| 亚洲三级国产| 成人国产精品一区二区网站| 五月天久久久| 国产欧美日韩一区二区三区四区 | 7777精品| 日韩三区免费| 日韩中文字幕视频网| 高潮久久久久久久久久久久久久| 亚洲女同一区| 国产精品chinese| 久久精品青草| 国产精品亚洲综合在线观看| 欧美一级精品| 国产精品嫩模av在线| 亚洲福利免费| 日本午夜精品| 欧美综合另类| 国产精品一区二区99| 亚洲二区精品| 国产福利资源一区| 在线亚洲欧美| 国产一区国产二区国产三区| 视频一区国产视频| 在线人成日本视频| 日本精品国产| 久久精品国内一区二区三区水蜜桃| 亚欧洲精品视频在线观看| 日韩在线观看一区| 国产欧美一区二区色老头| 樱桃成人精品视频在线播放| 精品一区91| 日韩在线观看一区二区三区| se01亚洲视频| 欧美激情91| 午夜精品婷婷| 精品午夜视频| 日本一区福利在线| 午夜欧美精品久久久久久久| 97精品在线| 欧美三级第一页| 午夜电影亚洲| 日韩一区二区中文| 国产精品分类| 日本一区二区中文字幕| 亚洲深夜福利| 色88888久久久久久影院| 国产精品传媒麻豆hd| 久久亚洲风情| 九九综合九九| 日本蜜桃在线观看视频| 国产精品nxnn| 日韩av资源网| 免费人成精品欧美精品| 亚洲福利免费| 美女网站视频一区| 国产精品地址| 久久激情综合网| 亚洲婷婷丁香| 亚洲一区激情| 欧美日韩国产一区二区三区不卡| 亚洲黄色网址| 久久天堂影院| 麻豆一区二区99久久久久| 日本午夜精品一区二区三区电影| 热久久久久久久| 麻豆成人在线| 国产视频一区欧美| 亚洲精品一二三区区别| 欧美综合另类| 国内精品99| 亚洲欧洲美洲av| 国产v日韩v欧美v| 水蜜桃精品av一区二区| 精品国产一级| 麻豆理论在线观看| 国产激情在线播放| 91欧美日韩| 狠狠躁少妇一区二区三区| 欧美日韩国产高清电影| 亚洲欧美伊人| 久久激情婷婷| 欧美一级精品| 婷婷色综合网| 在线视频亚洲| 男女男精品网站| 亚洲精品综合| 欧美日韩一区自拍| 国产麻豆一区二区三区精品视频| 国产日韩一区二区三区在线 | 欧美亚洲人成在线| 国产精品久久久久久av公交车| 国产精品巨作av| 久久99国产精品视频| 成人在线黄色| | 日本不卡在线视频| 国产欧美一区二区三区国产幕精品| 日本久久一区| 欧美aaaaaa午夜精品| 精品久久久久中文字幕小说| 国产精品久久久久久久久久10秀 | 精品国产乱码久久久久久樱花| 成人国产精品一区二区网站| 日韩av一级| 狠狠色综合网| 日韩黄色av| 国产精品777777在线播放 | 国产亚洲精品久久久久婷婷瑜伽| 午夜宅男久久久| 婷婷精品久久久久久久久久不卡| 91精品国产自产精品男人的天堂| 国产精品久久久久av蜜臀| 成人在线免费观看91| 久久国产亚洲| 免费在线成人网| 国产欧美三级| av高清一区| 久久午夜影视| 国产精品对白| 色婷婷综合网| 亚洲一区二区免费看| 91成人小视频| 日韩中文在线电影| 中文视频一区| 国产一区二区三区黄网站| 亚洲二区视频| 日韩成人精品一区二区三区| 国产999精品在线观看| 午夜av一区| 日韩高清一区在线| 国产成人免费| 午夜在线一区二区| 麻豆精品视频在线观看| 亚洲国内精品| 日韩亚洲精品在线观看| 国产黄大片在线观看| 日韩精品一区第一页| 精品一区二区三区中文字幕在线| 午夜久久福利| 久久久久久久久成人| 国产毛片一区| 精品中国亚洲| 日av在线不卡| 成人av三级| 综合一区二区三区| 成人精品高清在线视频| 久久高清国产| 97精品国产| 日韩精品视频一区二区三区| 精品72久久久久中文字幕| 免费视频久久| 久久久久久色| 久久国内精品| 久久久久久色| 偷拍欧美精品| 欧美国产日韩电影| 不卡中文字幕| 精品国产乱码久久久| 久久福利精品| 日韩啪啪电影网| 国产视频一区二区在线播放|