記一次糟心的使用:
前奏:
首先stream流分為三個(gè)階段:
? 1.創(chuàng)建
? 2.中間操作 :返回的還是流
? 3.終止操作:
最重要的一點(diǎn),如果你的代碼里沒(méi)有敲最后的終止操作,中間操作的代碼不會(huì)執(zhí)行,不會(huì)有結(jié)果的產(chǎn)生。這個(gè)叫惰性求值。
關(guān)于stream流有兩個(gè)問(wèn)題:
1.并行流和串行流?
并行流采用ForkJoinPool實(shí)現(xiàn)的,線程數(shù)默認(rèn)是cpu的數(shù)量
2.中間操作:
無(wú)狀態(tài)操作和有狀態(tài)操作:

2.flatMap 和map?

插入一個(gè)來(lái)自網(wǎng)絡(luò)的圖片

3.stream運(yùn)行機(jī)制:
wuzhua
1.只要沒(méi)有有狀態(tài)操作,就采用鏈?zhǔn)秸{(diào)用機(jī)制,每一條數(shù)據(jù)都只迭代一次,有狀態(tài)操作會(huì)階段無(wú)狀態(tài),單獨(dú)處理.
每一個(gè)中間操作返回一個(gè)新的流,流中有一個(gè)屬性sourceStage指向同一個(gè)Head
head-->nextStage-nextStage------ null

2.并行操作:有狀態(tài)的中間操作不一定并行操作。

3.parallel()/sequential() 中間操作,不過(guò)并沒(méi)有創(chuàng)建新的流,只是修改Head的并行標(biāo)志
使用:

數(shù)據(jù)結(jié)果:

使用2:

產(chǎn)生結(jié)果:

總結(jié):
我在使用了還有問(wèn)題,和lambda和方法的引用結(jié)合上,寫的不順手。原來(lái)是我lambda學(xué)的不到位,lambda學(xué)好了在用stream比較好。
char