2-14課程和2-12重複了,因此沒有發出來java
判斷方法引用 是否知足場景的要求的時候,只須要看咱們的出參和入參是否知足接口的要求便可this
四種方法引用類型:spa
指向靜態方法 Class::staticMethod
指向現有對象的實例方法 object::instanceMethod
指向任意類型的實例方法 C1ass::instanceMethod
指向構造方法 Class::new
package com.imooc.zhangxiaoxi.lambda; import java.util.ArrayList; import java.util.List; import java.util.Optional; /** * MethodReferenceTest * * 判斷方法引用 是否知足場景的要求的時候,只須要看咱們的出參和入參是否知足接口的要求便可 * * @author 魏豆豆 * @date 2020/4/6 */ public class MethodReferenceTest { static class Sku{ private String skuName; private Integer skuPrice; public Integer getSkuPrice() { return skuPrice; } /** * 靜態類方法引用 * @param sku1 * @param sku2 * @return */ public static int staUse(Sku sku1,Sku sku2){ return sku1.getSkuPrice()-sku2.getSkuPrice(); } public int instanceComparePrice(Sku sku){ return this.getSkuPrice() - sku.getSkuPrice(); } } class PriceComparator{ public int staUse2(Sku sku1,Sku sku2){ return sku1.getSkuPrice()-sku2.getSkuPrice(); } } /** * sort接收compare接口,裏面方法 爲compare方法,接收兩個同種類型的參數 * * 而案例中, * 1 兩個參數(sku1,sku2)同種類型 * 2 他們的單價相減 返回int類型 * 因此它們能夠做爲sort的lambda來使用 */ public void test(){ List<Sku> skuList = new ArrayList<Sku>(); skuList.sort((sku1,sku2)-> sku1.getSkuPrice()-sku2.getSkuPrice()); //1 類名::方法名 skuList.sort(Sku::staUse); //1 展開 skuList.sort((Sku sku1,Sku sku2)->{ return Sku.staUse(sku1,sku2); }); //2 對象::實例方法名 PriceComparator priceComparator = new PriceComparator(); skuList.sort(priceComparator::staUse2); //2 展開 skuList.sort((Sku sku1,Sku sku2)->{ return priceComparator.staUse2(sku1, sku2); }); //3 類名::實例方法名 skuList.sort(Sku::instanceComparePrice); //3 展開 skuList.sort((Sku object,Sku sku2)->{ return object.instanceComparePrice(sku2); } ); //4 指向構造方法的引用
// skuList 爲null 返回空, Optional.ofNullable(skuList).orElseGet(ArrayList::new); } }