java1 8 新特性 引用形式

2021-09-05 07:02:24 字數 3358 閱讀 1285

三種表現形式:

1. 物件::例項方法名

2. 類::靜態方法名

3. 類::例項方法名 (lambda引數列表中第乙個引數是例項方法的呼叫 者,第二個引數是例項方法的引數時可用)

public void test()

格式:classname::new

public void test2()

格式:type::new

public void test()

stream api

stream操作的三個步驟

建立stream

中間操作(過濾、map)

終止操作

stream的建立:

// 1,校驗通過collection 系列集合提供的stream()或者parallestream()

listlist = new arraylist<>();

streanstream1 = list.stream();

// 2.通過arrays的靜態方法stream()獲取陣列流

string str = new string[10];

streamstream2 = arrays.stream(str);

// 3.通過stream類中的靜態方法of

streamstream3 = stream.of("aa","bb","cc");

// 4.建立無限流

// 迭代

streamstream4 = stream.iterate(0,(x) -> x+2);

//生成

stream.generate(() ->math.random());

stream的中間操作:

/*** 篩選 過濾  去重

*/emps.stream()

.filter(e -> e.getage() > 10)

.limit(4)

.skip(4)

// 需要流中的元素重寫hashcode和equals方法

.distinct()

.foreach(system.out::println);

/***  生成新的流 通過map對映

*/emps.stream()

.map((e) -> e.getage())

.foreach(system.out::println);

/***  自然排序  定製排序

*/emps.stream()

.sorted((e1 ,e2) -> else

}).foreach(system.out::println);

stream的終止操作:

/***      查詢和匹配

*          allmatch-檢查是否匹配所有元素

*          anymatch-檢查是否至少匹配乙個元素

*          nonematch-檢查是否沒有匹配所有元素

*          findfirst-返回第乙個元素

*          findany-返回當前流中的任意元素

*          count-返回流中元素的總個數

*          max-返回流中最大值

*          min-返回流中最小值

*//**

*  檢查是否匹配元素

*/boolean b1 = emps.stream()

.allmatch((e) -> e.getstatus().equals(employee.status.busy));

system.out.println(b1);

boolean b2 = emps.stream()

.anymatch((e) -> e.getstatus().equals(employee.status.busy));

system.out.println(b2);

boolean b3 = emps.stream()

.nonematch((e) -> e.getstatus().equals(employee.status.busy));

system.out.println(b3);

optionalopt = emps.stream()

.findfirst();

system.out.println(opt.get());

// 並行流

optionalopt2 = emps.parallelstream()

.findany();

system.out.println(opt2.get());

long count = emps.stream()

.count();

system.out.println(count);

optionalmax = emps.stream()

.max((e1, e2) -> double.compare(e1.getsalary(), e2.getsalary()));

system.out.println(max.get());

optionalmin = emps.stream()

.min((e1, e2) -> double.compare(e1.getsalary(), e2.getsalary()));

system.out.println(min.get());

還有功能比較強大的兩個終止操作 reduce和collect

reduce操作: reduce:(t identity,binaryoperator)/reduce(binaryoperator)-可以將流中元素反覆結合起來,得到乙個值

/***  reduce :規約操作

*/listlist = arrays.aslist(1,2,3,4,5,6,7,8,9,10);

integer count2 = list.stream()

.reduce(0, (x, y) -> x + y);

system.out.println(count2);

optionalsum = emps.stream()

.map(employee::getsalary)

.reduce(double::sum);

system.out.println(sum);

collect操作:collect-將流轉換為其他形式,接收乙個collection介面的實現,用於給stream中元素做彙總的方法

/***  collect:收集操作

*/listagelist = emps.stream()

.map(employee::getage)

.collect(collectors.tolist());

agelist.stream().foreach(system.out::println);

java1 8 新特性 Lambda表示式

先來體驗一下lambda最直觀的優點 簡潔 匿名內部類 comparatorcpt new comparator treesetset new treeset cpt system.out.println 使用lambda表示式 comparatorcpt2 x,y integer.compare ...

java 18 異常處理

1 異常處理執行順序 當出現異常時,異常處理各部分執行順序 測試異常處理各個位置執 況 public static void textexception catch exception e finally 執行結果 設定返回值的情況 3 注釋掉finally中的return。catch中不注釋掉。測...

JDK1 8新特性 方法引用

方法引用是對lamdba的一種優化,因此,能用方法引用的地方,一定能用lamdba表示式。使用lamdba表示式,方法的引數必須是函式式介面,所以使用方法引用也要有乙個函式式介面。前提 物件已經存在,方法已經存在,就能使用了 前提 物件是已經存在的,成員方法也是已經存在的 定義乙個函式式介面 fun...