zoukankan      html  css  js  c++  java
  • 高效 告别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); } }

     

  • 相关阅读:
    tcpcopy用法
    iptable用法
    svn回滚
    J.U.C CAS
    J.U.C JMM. pipeline.指令重排序,happen-before(续)
    J.U.C JMM. pipeline.指令重排序,happen-before(续MESI协议)
    J.U.C JMM. pipeline.指令重排序,happen-before
    J.U.C atomic 数组,字段原子操作
    J.U.C atomic AtomicInteger解析
    J.U.C FutureTask之源码解析
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/12640970.html
Copyright © 2011-2022 走看看