2-14课程和2-12重复了,所以没有发出来
1 方法引用使用条件
判断方法引用 是否满足场景的要求的时候,只需要看我们的出参和入参是否满足接口的要求即可
2 方法引用场景
四种方法引用类型:
指向静态方法 Class::staticMethod
指向现有对象的实例方法 object::instanceMethod
指向任意类型的实例方法 C1ass::instanceMethod
指向构造方法 Class::new
3 方法引用demo
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); } }
诸葛