寫在前面,下面的鏈式呼叫曾經讓我驚豔過。有時,我會想,一行**如此之長是否真的合適,出了錯也許會比較難找,(比如某個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是實現了基於動態陣列的資料結構...