/*通過"類名",引用它的"靜態(tài)方法"*///已有一個(gè)接口interfaceIA{publicintgetMax(int a ,int b);}publicclassDemo02{publicstaticvoidmain(String[] args){//現(xiàn)在調(diào)用calc()方法//1.傳入Lambda--直接重寫getMax(int a,int b)方法calc((a,b)->{return a > b ? a : b;});//2.我們發(fā)現(xiàn)現(xiàn)有類庫中,有個(gè)方法實(shí)現(xiàn)了這個(gè)功能:Math類的靜態(tài)方法"max()"//由于是靜態(tài)方法,我們就可以直接通過"類名"引用靜態(tài)方法:格式:類名::方法名calc(Math::max);//實(shí)際傳入的是Math類的max()方法,calc方法內(nèi)部調(diào)用的也不是Lambda了,而是Math的max()方法}//已有的一個(gè)方法publicstaticvoidcalc(IA a){int max = a.getMax(10,20);System.out.println("最大值:"+ max);}}
3. Lambda方法引用_構(gòu)造器引用
1).引用某個(gè)類的“構(gòu)造方法”; 2).示例代碼:
//自定義貓類classCat{private String name;publicCat(String name){this.name = name;}@Overridepublic String toString(){return"我是一只小貓,我叫:{"+"name='"+ name +'\''+'}';}}//測試類publicclassDemo03{publicstaticvoidmain(String[] args){ArrayList<String> list =newArrayList<>();//存儲(chǔ)是貓的名字list.add("小花");list.add("小紅");list.add("小翠");//將這個(gè)集合中的名字構(gòu)造出對(duì)應(yīng)的Cat對(duì)象,并打印list.stream().map(s ->newCat(s))//將Stream<String> 轉(zhuǎn)換為Stream<Cat>.forEach(cat -> System.out.println(cat));//我們看map(s -> new Cat(s)),功能:接收一個(gè)String,返回一個(gè)Cat對(duì)象//而Cat類的帶參構(gòu)造方法也實(shí)現(xiàn)這個(gè)功能。這時(shí),我們就可以引用:Cat類的帶參的構(gòu)造方法list.stream().map(Cat::new)//引用Cat的String參數(shù)的構(gòu)造方法,自動(dòng)匹配Cat的String參數(shù)的構(gòu)造方法.forEach(cat -> System.out.println(cat));}}
4. Lambda方法引用_類引用成員方法【難點(diǎn)】
1).通過“類名”來引用它的“普通成員方法”。 2).示例代碼:
//已有的一個(gè)接口interfaceIA{publicintfindStr(String srcStr,String subStr);}//測試類publicclassDemo04{publicstaticvoidmain(String[] args){//1.使用匿名內(nèi)部類fun(newIA(){@OverridepublicintfindStr(String srcStr, String subStr){//找第二個(gè)參數(shù)在第一個(gè)參數(shù)中出現(xiàn)的位置int index = srcStr.indexOf(subStr);return index;}});//2.使用Lambdafun((srcStr, subStr)-> srcStr.indexOf(subStr));//也是:找第二個(gè)參數(shù)在第一個(gè)參數(shù)中出現(xiàn)的位置//當(dāng)我們的Lambda表達(dá)式中,是調(diào)用第一個(gè)參數(shù)的某個(gè)方法,將第二個(gè)參數(shù)作為調(diào)用第一個(gè)參數(shù)的方法的實(shí)參//這時(shí)可以使用"第一個(gè)參數(shù)的類型名::這個(gè)類中被調(diào)用的方法名"的形式引用一個(gè)類的普通方法。fun(String::indexOf);}//已有的一個(gè)方法publicstaticvoidfun(IA a){int index = a.findStr("我愛Java","Java");//內(nèi)部:"我愛Java".indexOf("Java")System.out.println("索引位置:"+ index);}}