對集合list/set進行操作是非常常見的事情。我們可以使用optional類來處理空指標問題(optional操作可以參考optional類判空操作)。之後對元素進行遍歷,改變,排序等操作可以使用stream類了。
stream不是集合,也不儲存資料,是用來操作集合裡元素的,像乙個高階版本的迭代器。stream的方法分為中間方法和終結方法,中間方法依然會返回stream,終結方法就相當於這個流的所有元素都已經消費完畢了,不會有後續操作了。
下面列出常見的方法使用
1、map 對映
map方法是中間方法。使用map會使每個元素都執行對映函式,一遍而言是希望對元素有所改變。若是不想改變元素,僅僅是使用元素的值,可以使用遍歷foreach。
list
list = lists.
newarraylist()
;list.
add(
"qsm1");
list.
add(
"qsm2");
list.
add(
"qsm3");
list.
add(
"hn1");
list.
add(
"hn2");
list.
add(
"hn3");
list.
add(
"jd1");
list.
add(
"jd2");
//map 中間操作
list
map1 = list.
stream()
.map
(s -
>
return s;})
.collect
(collectors.
tolist()
);system.out.
println
(map1)
;//[q, q, q, hn1, hn2, hn3, jd1, jd2]
list
tempmaplist =lists.
newarraylist()
;list
map2 = list.
stream()
.map
(s -
>
return s;})
.collect
(collectors.
tolist()
);system.out.
println
(tempmaplist)
;//[q, q, q]
system.out.
println
(map2)
;//[q, q, q, hn1, hn2, hn3, jd1, jd2]
2、foreach遍歷
foreach 終止操作。注意:foreach 不能修改自己包含的本地變數值,也不能用 break/return 之類的關鍵字提前結束迴圈。
void foreach(consumer<? super t> action);
tempmaplist.
clear()
;list.
stream()
.foreach
(s -
> tempmaplist.
add(integer.
tostring
(s.length()
)));
system.out.
println
(tempmaplist)
;//[4, 4, 4, 3, 3, 3, 3, 3]
3、filter過濾
filter 過濾,只保留符合條件的元素; 中間操作
streamfilter(predicate<? super t> predicate);
list.
stream()
.filter
(s -
> s.
startswith
("q"))
.foreach
(system.out:
:println)
;// qsm1 qsm2 qsm3
-> s.startswith("a")).foreach(s -> system.out.println(s));
4、sorted排序
sorted之後, 原來list不會改變; 中間操作
streamsorted(comparator<? super t> comparator);
list.
stream()
.sorted
(comparator.
comparingint
(string:
:length)).
filter
(s -
> s.
startswith
("j"))
.foreach
(system.out:
:println)
;//jd1 jd2
list
collect = list.
stream()
.sorted
((a, b)
-> a.
length()
- b.
length()
).filter
(s -
> s.
contains
("1"))
.collect
(collectors.
tolist()
);system.out.
println
(collect)
;//[hn1, jd1, qsm1]
system.out.
println
(list)
;//[qsm1, qsm2, qsm3, hn1, hn2, hn3, jd1, jd2]
5、match匹配
match對所有元素進行匹配,是否滿足條件。
boolean anymatch(predicate<? super t> predicate);
list.
stream()
.anymatch
(s -
> s.
length()
>3)
;//true
list.
stream()
.allmatch
(s -
> s.
length()
>3)
;//false
list.
stream()
.nonematch
(s -
> s.
length()
>3)
;//false
6、reduce規約
reduce 規約:多個元素規約為乙個元素,identity為乙個初始種子
optionalreduce(binaryoperatoraccumulator);
optional
reduce = list.
stream()
.reduce
((a, b)
-> a +
"->"
+ b)
;string qsm = list.
stream()
.reduce
("qq"
,(a, b)
-> a +
"->"
+ b)
;system.out.
println
(reduce.
orelse
(null));
//qsm1->qsm2->qsm3->hn1->hn2->hn3->jd1->jd2
system.out.
println
(qsm)
;//qq->qsm1->qsm2->qsm3->hn1->hn2->hn3->jd1->jd2
【正在去bat的路上修行】
一看就懂的SwitchHosts
switchhosts 是乙個管理 切換多個 hosts 方案的工具。它是乙個免費開源軟體。日常開發工作中,我們可能經常需要切換各種 hosts 繫結,比如在本地開發時可能需要乙個開發環境的 hosts 繫結方案,發布到測試環境後又有乙個測試環境的 hosts 繫結方案,然後可能還有乙個預發布環境,...
一看就懂TCP 連線
我們先來看乙個定義。這樣理解比較抽象。我們換個角度。它的本質還是傳輸控制。如果讓我們自己設計這個傳輸,我們會怎麼想呢。tcp 協議它會先建立連線。三次握手目的是保證雙方都有傳送和接收的能力 首要原因是為了防止舊的重複連線初始化造成混亂。同步雙方初始序列號客戶端和服務端都處於 closed 狀態。先是...
資訊熵 一看就懂
先給出資訊熵的公式 首先了解一下資訊量 資訊量是對資訊的度量,就跟時間的度量是秒一樣,當我們考慮乙個離散的隨機變數 x 的時候,當我們觀察到的這個變數的乙個具體值的時候,我們接收到了多少資訊呢?多少資訊用資訊量來衡量,我們接受到的資訊量跟具體發生的事件有關。資訊的大小跟隨機事件的概率有關。越小概率的...