高效 告别996,开启java高效编程之门 2-15方法引用精讲

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); } }

 

猜你喜欢

转载自www.cnblogs.com/1446358788-qq/p/12640970.html