產生乙個全新的流,和資料來源沒有關係(資料來源不受影響)
a)建立stream方式:
1)collection 例如:new arraylist<>().stream()
2)陣列 arrays.stream()
3)通過stream類中的靜態方法of()
4)建立無限流
//建立無線流 — 迭代方式
@test
public
void
test1()
//建立無線流 ——生成
@test
public
void
test2()
b)中間操作
1)篩選與切片
filter——接收lambda,從流中排除某些元素。
@test
public
void
test3()
);/** 終止操作:一次性執行全部內容,就是「惰性求值」;
例如:在沒有進行終止操作的情況下所有的中間操作都不會執行,只有當執行了終止操作,中間操作才會全部一次性執行!!
**/stream.
foreach
(system.out:
:println)
;//列印就是終止操作!
}
limit——截斷流,使其元素不超過給定數量
@test
public
void
test3()
).limit(1
).foreach
(system.out:
:println)
;//限制為1條
}
skip(n)——跳過元素,例如集合中一共有五個元素,skip(2)就是跳過前兩個,留下後三個;若流中元素不足n個,則返回乙個空流。與limit(n)互補
distinct——篩選(去重),通過流所生成的元素hashcode() 和equals()去除重複的元素
2)對映(map)
map——接收lambda,將元素轉換成其他形式或提取資訊。接收乙個函式作為引數,該函式會被應用到每個元素上,並將其對映成乙個新的元素。
flatmap——接收乙個函式作為引數,將流中的每個值都換成另乙個流,然後把所有的流連線成乙個流。
//對映
@test
public
void
test4()
3)排序
sorted() :自然排序(comparable)
@test
public
void
test5()
sorted(comparator com):定製排序
c)終止操作
以下為終止操作常用的各個方法:
allmatch
anymatch
nonematch
findfirst
findany
count
max
min
d)規約
reduce(t identity,binaryoperator) / reduce(binaryoperator) 可以將流中元素反覆結合起來,得到乙個值。
@test
public
void
test1()
e)收集
collect——將流轉換為其他形式。接收乙個collector介面的實現,用於給stream中元素做彙總的方法
//需求:將員工類中的所有名字收集到集合list中
public
void
test2()
//set實現上乙個需求(set可以將員工集合中的重複名字的員工去重)
@test
public
void
test3()
//
@test
public void test4()
收集方式除了以上這些之外還有,groupingby(多級分組)、partitioningby(分割槽)、joining(連線)等方法,可根據需求查詢api文件。 jdk8中forEach使用問題
實話說,jdk8出來好久了,公司一直用的還是jdk7,沒有公升級,最近終於公升級到jdk8了,所以來自己改改 使用jdk8中的新特性,最簡單的foreach先來試試 測試 如下 public static void testjdk8foreach 2 jdk8 foreach aslist.fore...
JDK8中的鎖優化
參考 longadder 類似automiclong,但是提供了 熱點分離 過程如下 如果併發不激烈,則與automiclong 一樣,cas賦值。如果出現併發操作,則使用陣列,陣列的各元素之和為真實value,讓操作分散在陣列各個元素上,把併發操作壓力分散,一遇到併發就擴容陣列,最後達到高效率。一...
JDK8中介面的變化
package cn.king.demo01 介面 inte ce myinter01 介面中的 static方法 只能使用 介面名.靜態方法名 的方式呼叫 static void fun2 實現類 class myinter01impl implements myinter01 測試 public...