• 高效 告别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); } }

     

  • 相关阅读:
    Windows下给你mac下的开发体验 windows+wsl+zsh+vscode
    Puppeteer在docker下踩坑记录
    egret EUI加载 JSZip打包DragonBones二进制文件
    nodeJS rsasha加密
    Elasticsearch 聚合字段后 获取聚合字段的单条详细信息
    【转发自用】Apache2.4服务器权限设置问题
    C#重写VIVO支付SDK VivoSignUtils
    VS2017 空白 node.js web应用程序
    less开发
    获取样式getComputedStyle
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/12640970.html
Copyright © 2020-2023  润新知