JAVA8 Stream接口,map操作,filter操作妆丘,flatMap操作

感謝原創(chuàng)!
這篇局劲,我們來看Stream的一些中間操作勺拣,關于中間操作的一些介紹,可以看《JAVA8 stream接口 中間操作和終端操作》

1鱼填,filter操作药有,我們先看方法的定義

Stream<T> filter(Predicate<? super T> predicate);

這個方法,傳入一個Predicate的函數(shù)接口苹丸,關于Predicate函數(shù)接口定義愤惰,可以查看《JAVA8 Predicate接口》,這個接口傳入一個泛型參數(shù)T赘理,做完操作之后宦言,返回一個boolean值;filter方法的作用商模,是對這個boolean做判斷蜡励,返回true判斷之后的對象令花,下面一個案例,可以看到怎么使用

String[] dd = { "a", "b", "c" };        Stream<String> stream = Arrays.stream(dd);      stream.filter(str -> str.equals("a")).forEach(System.out::println);//返回字符串為a的值

2.map操作凉倚,先看方法定義

<R> Stream<R> map(Function<? super T, ? extends R> mapper);

這個方法傳入一個Function的函數(shù)式接口兼都,接口定義可以查看《JAVA8 Function接口》,這個接口稽寒,接收一個泛型T扮碧,返回泛型R,map函數(shù)的定義杏糙,返回的流慎王,表示的泛型是R對象,這個表示宏侍,調(diào)用這個函數(shù)后赖淤,可以改變返回的類型,先看下面的案例

public class TestJava8 {    public static void main(String[] args) {        Integer[] dd = { 1, 2, 3 };     Stream<Integer> stream = Arrays.stream(dd);     stream.map(str -> Integer.toString(str)).forEach(str -> {           System.out.println(str);// 1 ,2 ,3          System.out.println(str.getClass());// class java.lang.String        });         List<Emp> list = Arrays.asList(new Emp("a"), new Emp("b"), new Emp("c"));       list.stream().map(emp -> emp.getName()).forEach(str -> {            System.out.println(str);        });     }   public static class Emp {       private String name;        public Emp() {          super();        }       public Emp(String name) {           super();            this.name = name;       }       public String getName() {           return name;        }       public void setName(String name) {          this.name = name;       }   }}

可以看到谅河,我們把Integer咱旱,變成了String輸出,把Emp對象里的name字符串绷耍,單獨輸出吐限;現(xiàn)在,我們只看到了一個forEach的終端操作褂始,后面诸典,我們會看到,更多的終端操作崎苗,把map操作后狐粱,改變的對象類型,返回各種類型的集合胆数,或者對數(shù)字類型的脑奠,返回求和,最大幅慌,最小等的操作宋欺;

3.flatMap操作,我們還是先看接口定義

<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);

這個接口胰伍,跟map一樣齿诞,接收一個Fucntion的函數(shù)式接口,不同的是骂租,F(xiàn)unction接收的泛型參數(shù)祷杈,第二個參數(shù)是一個Stream流;方法渗饮,返回的也是泛型R但汞,具體的作用是把兩個流宿刮,變成一個流返回,下面私蕾,我們看一個案例僵缺,來詳細解答,怎么把兩個流的內(nèi)容踩叭,變成一個流的內(nèi)容

public class TestJava8 {    public static void main(String[] args) {        String[] strs = { "aaa", "bbb", "ccc" };        Arrays.stream(strs).map(str -> str.split("")).forEach(System.out::println);// Ljava.lang.String;@53d8d10a       Arrays.stream(strs).map(str -> str.split("")).flatMap(Arrays::stream).forEach(System.out::println);// aaabbbccc     Arrays.stream(strs).map(str -> str.split("")).flatMap(str -> Arrays.stream(str)).forEach(System.out::println);// aaabbbccc  }}

首先磕潮,第一個輸出語句里,我們看到容贝,我們輸出的對象自脯,并不是想象中的具體的字符串,第二段代碼斤富,才輸出的具體的字符串膏潮;

第一段輸出代碼里,我們先看map操作满力,通過上面對map的介紹焕参,我們可以看到,map可以改變返回的Stream的泛型脚囊,str.split("")龟糕,根據(jù)空字符串分隔桐磁,返回的類型是一個數(shù)組悔耘,返回的流也是Stream<String[]>,而不是Stream<String>我擂;在第二段代碼中衬以,數(shù)組的流,經(jīng)過map操作校摩,返回Stream<String[]>后看峻,再經(jīng)過flatMap,把數(shù)組通過Arrays.stream變成一個新的流衙吩,再返回到原來的流里互妓;這樣,兩個流就合并成一個流坤塞;第三段代碼冯勉,是第二段代碼的,另一種寫法摹芙;

1.lambda表達式

《java8 Lambda表達式簡介》

《java8 lambda表達式灼狰,方法的引用以及構造器的引用》

2.函數(shù)式接口

《java8 函數(shù)式接口簡介》

《JAVA8 Function接口以及同類型的特化的接口》

《JAVA8 Consumer接口》

《JAVA8 Supplier接口》

《JAVA8 UnaryOperator接口》

《JAVA8 BiConsumer 接口》

3.stream接口操作

《java8 Stream接口簡介》

《 java8 Stream-創(chuàng)建流的幾種方式》

《JAVA8 stream接口 中間操作和終端操作》

《JAVA8 Stream接口,map操作浮禾,filter操作交胚,flatMap操作》

《JAVA8 stream接口 distinct份汗,sorted,peek蝴簇,limit杯活,skip》

《java8 stream接口 終端操作 forEachOrdered和forEach》

《java8 stream接口 終端操作 toArray操作》

《java8 stream接口 終端操作 min,max军熏,findFirst轩猩,findAny操作》

《java8 stream接口終端操作 count,anyMatch荡澎,allMatch均践,noneMatch》

《java8 srteam接口終端操作reduce操作》

《java8 stream接口 終端操作 collect操作》

4.其他部分

《java8 Optional靜態(tài)類簡介,以及用法》

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摩幔,一起剝皮案震驚了整個濱河市彤委,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌或衡,老刑警劉巖焦影,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異封断,居然都是意外死亡斯辰,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門坡疼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彬呻,“玉大人,你說我怎么就攤上這事柄瑰≌⒌” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵教沾,是天一觀的道長蒲跨。 經(jīng)常有香客問我,道長授翻,這世上最難降的妖魔是什么或悲? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮堪唐,結果婚禮上巡语,老公的妹妹穿的比我還像新娘。我一直安慰自己羔杨,他們只是感情好捌臊,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著兜材,像睡著了一般理澎。 火紅的嫁衣襯著肌膚如雪逞力。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天糠爬,我揣著相機與錄音寇荧,去河邊找鬼。 笑死执隧,一個胖子當著我的面吹牛揩抡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播镀琉,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼峦嗤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屋摔?” 一聲冷哼從身側響起烁设,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钓试,沒想到半個月后装黑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡弓熏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年恋谭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挽鞠。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡疚颊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滞谢,到底是詐尸還是另有隱情串稀,我是刑警寧澤除抛,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布狮杨,位于F島的核電站,受9級特大地震影響到忽,放射性物質發(fā)生泄漏橄教。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一喘漏、第九天 我趴在偏房一處隱蔽的房頂上張望护蝶。 院中可真熱鬧,春花似錦翩迈、人聲如沸持灰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堤魁。三九已至喂链,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妥泉,已是汗流浹背椭微。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盲链,地道東北人蝇率。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像刽沾,于是被迫代替她去往敵國和親本慕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容