Java 8 Streams部分API簡介

2021-08-03 11:01:21 字數 3026 閱讀 3914

寫在前面,下面的鏈式呼叫曾經讓我驚豔過。有時,我會想,一行**如此之長是否真的合適,出了錯也許會比較難找,(比如某個set返回不是msginfo物件而是null的話,定位都會是這一行),然而,這不妨礙心中莫名其妙的自豪感,身為碼農,最重要的不是對自己流利**和自身高尚品質的絕對自信麼?笑:-d

msginfo msginfo = new msginfo();

msginfo.setownerid("100011002")

.setrelatedid("1000110003")

.setbody("hello 鏈式呼叫")

.settype(msginfo.type.text)

.setdirect(msginfo.direct.send)

.setstatus(msginfo.status.sending)

.settime(system.currenttimemillis());

前言說完,這一次的stream也是可以同樣做到長鏈式呼叫從而完成原先需要許多行**才能實現的事。

參考內容寫在前面,因為這篇文章比我的全面許多,我只是列舉乙個實踐中常用,此外,文章中還有有趣的optional的用法簡介,也是很棒的學習內容,在findfirst這個api中。

這就是鏈結啦:我是鏈結。

總算開始說正文了。。。

newsarticle a=new newsarticle();

int i=0;

articlelist.stream().foreach(temp->);

似乎跑偏了,接下去是常用的幾個api:filter、map、foreach、sorted、findfirst、reduce、limit/skip、min/max/distinct、allmatch/anymatch/nonematch,有幾個會舉例說明(畢竟自己寫了啊~~)

先建個list吧,以下例子都是以這個list為前提的:

listlist=new arraylist();

list.add(1);

list.add(2);

list.add(3);

list.add(4);

list.add(5);

list.add(6);

list.add(7);

filter:篩選出符合某個條件的元素

list.stream().filter(p->p>2).foreach(temp->system.out.println(temp));

map:把input stream的每乙個元素,對映成output stream的另外乙個元素。超級好用!!!!!

listlist2=list.stream().map(p->p+"aaaaaaa").collect(collectors.tolist());

list2.stream().foreach(temp->system.out.println(temp));

foreach:遍歷每乙個元素,對這個元素執行某項操作(可以是一段**~~~~)

list.stream().foreach(p->);

sorted:如其名一般,用以實現排序,比如下面的倒序實現。(實質是實現兩個元素的可比)

list.stream().sorted((p1,p2)-> ).foreach(temp->system.out.println(temp));

下面幾個偷懶不寫啦~~~~

findfirst:返回stream的第乙個元素,或者空。

reduce:這個方法的主要作用是把 stream 元素組合起來。它提供乙個起始值(種子),然後依照運算規則(binaryoperator),和前面 stream 的第乙個、第二個、第 n 個元素組合。

limit/skip:limit 返回 stream 的前面 n 個元素;skip 則是扔掉前 n 個元素。

min/max/distinct:min/max取最小/最大值,使用 distinct 來找出不重複的單詞。

allmatch/anymatch/nonematch:allmatch:stream 中全部元素符合傳入的 predicate,返回 true;anymatch:stream 中只要有乙個元素符合傳入的 predicate,返回 true;nonematch:stream 中沒有乙個元素符合傳入的 predicate,返回 true。

值得注意的是,這些操作都不會改變list中元素本身(基本型別保持值不變,物件可以改變屬性的值),需要.collect(collectors.tolist())將其組織成另乙個物件。

舉例來說這個樣子:

listlist2=list.stream().filter(p->p>2).collect(collectors.tolist());

list.stream().foreach(temp->system.out.println(temp));//1、2、3、4、5、6、7

list2.stream().foreach(temp->system.out.println(temp));//3、4、5、6、7

最後是兩個有點複雜的無聊的例子,只為了說明鏈式呼叫可以寫的很長很棒並且完成了許多內容,自信點~~~

listteampoints = teams.stream().map(temp -> 

).sorted((p1, p2) -> else

}).collect(collectors.tolist());

以上~~

Java基礎部分記錄

1 基本資料型別 在棧區直接儲存資料 byte short int long double float char boolean 整數型別 4 浮點型別 2 字元 布林值 這八種資料型別有對應的封裝型別 byte short integer long double float charactor b...

JAVA 部分基礎點

運算子 算術運算子 和 兩個整數相除,結果還是整數。賦值運算子 和 比較運算子 和 邏輯運算子 和 位運算子 和 字串string是擁有 值語義 的引用型別,字串常量實現了 享元模式 equals 會按照內容進行比較,按照位址比較。命名規則 包 其實就是資料夾,用於解決相同類名問題 包名要求全部小寫...

部分java相關問題

1 arraylist和linkedlist的區別?arraylist linkedlist vector和stack是list的四個實現類,其中vector是基於jdk1.0,雖然實現了同步,但是效率低,已經不用了,stack繼承vector 區別 arraylist是實現了基於動態陣列的資料結構...