三種表現形式:
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...