關於JDK8中Stream API的常見使用方法

2021-10-07 12:38:29 字數 2291 閱讀 3873

​ 產生乙個全新的流,和資料來源沒有關係(資料來源不受影響)

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...