美文网首页
java8方法引用几个使用场景

java8方法引用几个使用场景

作者: MatsuiRakuyo | 来源:发表于2018-03-20 21:34 被阅读0次

    样例接口,唯一方法的签名为一个int参数,一个MyClass类型返回值

    interface MyCons {
            MyClass func(int n);
        }
    

    样例类,静态内部类(是次要的),唯一构造方法,一个int参数

        static class MyClass {
            private int val;
            MyClass(int v) {
                val = v;
            }
            public int getValue() {
                return val;
            }
        }
    

    准备拿来充当实现的方法

        private static int compareMC(MyClass a, MyClass b) {
            return a.getValue() - b.getValue();
        }
    

    (它的标准形式

        private static <T> int compareAny(T t, T t1) {
            return 0;
        }
    
        public static void ref1() {
            List<MyClass> a1 = new ArrayList<MyClass>();
            a1.add(new MyClass(1));
            a1.add(new MyClass(4));
            a1.add(new MyClass(2));
            a1.add(new MyClass(9));
            a1.add(new MyClass(3));
            a1.add(new MyClass(7));
            //UseMethodRef::compareMC生成了抽象接口Comparator定义的compare()方法的实例。
            //1,生成Comparator实例,并指定compareMC为其compare方法的实现
            MyClass maxValObj = Collections.max(a1, MethodReference::compareMC); 
            //2,lambda 表达式
            MyClass maxValOb2 = Collections.max(a1, (a, b)->(a.getValue() - b.getValue()));
            //3,普通形式,匿名内部类
            MyClass maxValOb3 = Collections.max(a1, new Comparator<MyClass>() {
                @Override
                public int compare(MyClass a, MyClass b) {
                    return a.getValue() - b.getValue();
                }
            });
            System.out.println("Maximum value is: " + maxValObj.getValue());
        }
    
    /**对象初始化*/
    public static void construct1Ref() {
        ////将MyClass的构造函数作为func的实现, 方法签名一致
        MyCons con = MyClass::new; 
        MyClass ins = con.func(10);
    }
    
    /**数组初始化*/
    public static void construct2Ref() {
        IntFunction<int[]> arrayMaker = int[]::new; //唯一方法int[] apply(int)
        int[] array = arrayMaker.apply(10); // 创建数组 int[10]
    }
    
    /**函数式*/
    public static void memberMethodRef() {
        Arrays.asList("aa","bb","cc").forEach(System.out::println);
    }

    相关文章

      网友评论

          本文标题:java8方法引用几个使用场景

          本文链接:https://www.haomeiwen.com/subject/pmriqftx.html