Stream類的集合操作 一看就會

2021-10-07 21:03:06 字數 4188 閱讀 8819

對集合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 的時候,當我們觀察到的這個變數的乙個具體值的時候,我們接收到了多少資訊呢?多少資訊用資訊量來衡量,我們接受到的資訊量跟具體發生的事件有關。資訊的大小跟隨機事件的概率有關。越小概率的...