高效 告別996,開啓java高效編程之門 2-15方法引用精講

2-14課程和2-12重複了,因此沒有發出來java

1  方法引用使用條件

 判斷方法引用 是否知足場景的要求的時候,只須要看咱們的出參和入參是否知足接口的要求便可this



 

2  方法引用場景

 四種方法引用類型:spa

指向靜態方法         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); } }
相關文章
相關標籤/搜索