java8方法引用几个使用场景

样例接口,唯一方法的签名为一个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  int compareAny(T t, T t1) {
        return 0;
    }
    public static void ref1() {
        List a1 = new ArrayList();
        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() {
            @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 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方法引用几个使用场景)