日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

stream map方法_Java Stream中map和flatMap方法

發布時間:2023/11/27 生活经验 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stream map方法_Java Stream中map和flatMap方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近看到一篇講stream語法的文章,學習Javamap()flatMap()方法之間的區別。

雖然看起來這兩種方法都做同樣的事情,都是做的映射操作,但實際上差之毫厘謬以千里。

通過演示Demo中的代碼可以了解map()flatMap()的具體功能差異。

  • 首先來一段簡單的stream語法foreach方法的用法

演示Demo:

????????List?funs?=?Arrays.asList("F",?"U",?"N");
????????funs.stream().forEach(x?->?output(x));

控制臺輸出:

INFO->?當前用戶:fv,IP:10.60.192.21,工作目錄:/Users/fv/Documents/workspace/fun/,系統編碼格式:UTF-8,系統Mac OS X版本:10.15.7
F
U
N

Process?finished?with?exit?code?0

map方法

map()是一個中間操作,這意味著它返回Stream對象。

  • 先來一個簡單

演示Demo:

????????List?funs?=?Arrays.asList("F",?"U",?"N");
????????funs.stream().map(x->x+"001").forEach(x->output(x));

控制臺輸出:

INFO->?當前用戶:fv,IP:10.60.192.21,工作目錄:/Users/fv/Documents/workspace/fun/,系統編碼格式:UTF-8,系統Mac OS X版本:10.15.7
INFO->?f
INFO->?u
INFO->?n
INFO->?F001
INFO->?U001
INFO->?N001
java.util.stream.ReferencePipeline$3@27ae2fd0
java.util.stream.ReferencePipeline$3@29176cc1

Process?finished?with?exit?code?0

  • 再來一個復雜的

演示Demo:

????????List?fun1?=?Arrays.asList("one",?"two",?"three");
????????List?fun2?=?Arrays.asList("four",?"five",?"six");
????????List>?nestedList?=?Arrays.asList(fun1,?fun2);
????????nestedList.stream().map(x?->?{return?x.stream().map(a?->?a.toUpperCase());
????????}).forEach(x?->?output(x));

控制臺輸出:

INFO->?當前用戶:fv,IP:10.60.192.21,工作目錄:/Users/fv/Documents/workspace/fun/,系統編碼格式:UTF-8,系統Mac OS X版本:10.15.7
INFO->?java.util.stream.ReferencePipeline$3@45018215
INFO->?java.util.stream.ReferencePipeline$3@30b7c004

顯然,在最后一步輸出的時候,x是一個stream的對象,而不是一個list對象。

當我們嘗試從List>獲取值進行操作時,map()無法如預期一樣工作,需要進行修改才能從嵌套的List>對象獲取字符串值。

如下:

????????List?fun1?=?Arrays.asList("one",?"two",?"three");
????????List?fun2?=?Arrays.asList("four",?"five",?"six");
????????List>?nestedList?=?Arrays.asList(fun1,?fun2);
????????nestedList.stream().map(x?->?{return?x.stream().map(a?->?a.toUpperCase());
????????}).forEach(x?->x.forEach(a->output(a)));

控制臺輸出:

INFO->?當前用戶:fv,IP:10.60.192.21,工作目錄:/Users/fv/Documents/workspace/fun/,系統編碼格式:UTF-8,系統Mac OS X版本:10.15.7
INFO->?ONE
INFO->?TWO
INFO->?THREE
INFO->?FOUR
INFO->?FIVE
INFO->?SIX

Process?finished?with?exit?code?0

flatMap方法

讓我們在上述代碼中將map()更改為flatMap(),然后查看輸出。

  • 先來一個簡單

演示Demo:

????????List?fun1?=?Arrays.asList("one",?"two",?"three");
????????List?fun2?=?Arrays.asList("four",?"five",?"six");
????????List>?nestedList?=?Arrays.asList(fun1,?fun2);
????????nestedList.stream().flatMap(x?->?x.stream()).map(x->x.toUpperCase()).forEach(x?->?output(x));

控制臺輸出:

INFO->?當前用戶:fv,IP:10.60.192.21,工作目錄:/Users/fv/Documents/workspace/fun/,系統編碼格式:UTF-8,系統Mac OS X版本:10.15.7
INFO->?ONE
INFO->?TWO
INFO->?THREE
INFO->?FOUR
INFO->?FIVE
INFO->?SIX

Process?finished?with?exit?code?0

相當于在.flatMap(x -> x.stream())這個時候我們把x.stream()返回的stream對象合并成了一個新的stream對象。這一點在Stream類的方法注釋中找到了印證。

??/**
??·····
?????*?@return?the?new?stream
?????*/
?????Stream?flatMap(Function?super?T,???extends?Stream?extends?R>>?mapper);

Java 8 map()與flatMap()

map()flatMap()方法都可以應用于StreamOptional對象。并且都返回StreamOptional 對象。區別在于map()操作為每個輸入值生成一個輸出值,而flatMap()操作為每個輸入值生成任意數量(零個或多個)的輸出值。

flatMap()中,每個輸入始終是一個集合,可以是ListSetMap

map()操作采用一個方法,該方法針對輸入流中的每個值調用,并生成一個結果值,該結果值返回至stream

flatMap()操作采用的功能在概念上消耗一個集合對象并產生任意數量的值。但是在Java中方法返回任意數目的值很麻煩,因為方法只能返回void或一個對象。

演示Demo:

????????List?fun1?=?Arrays.asList("one",?"two",?"three");
????????List?fun2?=?Arrays.asList("four",?"five",?"six");
????????Stream.of(fun1,fun2).flatMap(List::stream).forEach(Output::output);

控制臺輸出:

INFO->?當前用戶:fv,IP:10.60.192.21,工作目錄:/Users/fv/Documents/workspace/fun/,系統編碼格式:UTF-8,系統Mac OS X版本:10.15.7
INFO->?one
INFO->?two
INFO->?three
INFO->?four
INFO->?five
INFO->?six

Process?finished?with?exit?code?0


公眾號FunTester首發,原創分享愛好者,騰訊云和掘金社區首頁推薦,知乎七級原創作者,歡迎關注、交流,禁止第三方擅自轉載。

FunTester熱文精選

  • 寫給所有人的編程思維
  • 2020年Tester自我提升
  • 未來的神器fiddler Everywhere
  • 測試開發工程師工作技巧
  • Selenium4 IDE,它終于來了
  • 自動化測試靈魂三問:是什么、為什么和做什么
  • 為什么測試覆蓋率如此重要
  • 吐個槽,非測勿入。
  • 自動化測試框架
  • 敏捷中的端到端測試

總結

以上是生活随笔為你收集整理的stream map方法_Java Stream中map和flatMap方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。