java8 中静态方法的双冒号引用示例。
首先我们创建一个函数式接口
@FunctionalInterface
public interface ArrayInterface {
public abstract int maxValue(int[] arr);
}
其次,静态方法一般都是工具类中用,我们写一个获取数组最大值的方法。
public class ArrayUtils {
//定义一个方法返回数组的最大值
public static int getMax(int[] arr){
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max){
max = arr[i];
}
}
return max;
}
}
然后我们开始一步步优化,具体的流程如下:
public class LamdbaExperss01 {
public static void main(String[] args) {
//定义整型数组,调用工具类的静态方法获得数组的最大值
int[] arr = {1,33,5,7,9,13,25};
//第一种 使用匿名内部类
ArrayInterface a01 = new ArrayInterface() {
@Override
public int maxValue(int[] arr) {
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max){
max = arr[i];
}
}
return max;
}
};
//调用a01对象的方法获得数组的最大值
int maxValue01 = a01.maxValue(arr);
System.out.println(maxValue01);
//升级版 第二种 用Lamdba表达式简化 匿名内部类
ArrayInterface a02 = (int[] arr02)->{
int max = arr02[0];
for (int i = 0; i < arr02.length; i++) {
if (arr02[i] > max){
max = arr02[i];
}
}
return max;
};
int maxValue02 = a02.maxValue(arr);
System.out.println(maxValue02);
//再升级版 第三种 在上面lamdba表达式中调用工具类的方法求数组的最大值
ArrayInterface a03 = (int[] arr03)->{
int max03 = ArrayUtils.getMax(arr03);
return max03;
};
// 第三种简化后 第一版
ArrayInterface a04 = (int[] arr03)->{ return ArrayUtils.getMax(arr03); };
// 第三种简化后 第二版
ArrayInterface a05 = arr05-> ArrayUtils.getMax(arr05);
//第三种简化后 第三版
ArrayInterface a06 = ArrayUtils::getMax;
int maxValue06 = a06.maxValue(arr);
System.out.println(maxValue06);
}
}
最后的输出结果都一样:
33 33 33



