一.JDK8新特性之方法引用-案例实操
之前我们学习了Stream流以及Lambda表达式相关的内容,如果想看的同学可以看一下之前的文章,接下来我们就来学习让Lambda表达式更加简洁的
方法引用
。
二. 什么是方法引用?为什么要使用方法引用?
2.1 lambda表达式冗余
- 案例描述:求解数组中元素的和
- 存在的问题:lambda表达式中逻辑过于复杂
- 改进方法:通过方法引用降低冗余,提升效率
import java.util.function.Consumer;
/**
* 案例描述:求解数组中元素的和
* 存在的问题:lambda表达式中逻辑过于复杂
* 改进方法:通过方法引用降低冗余,提升效率
*/
public class Demo{
public static void main(String[] args) {
sum(a->{
int sum = 0;
for (int i : a) {
sum += i;
}
System.out.println("数组之和:" + sum);
});
}
public static void sum(Consumer<int[]> consumer){
int[] a= {1,1,1,1,1,1};
consumer.accept(a);
}
}
结果展示:
2.2 方法引用解决
符号表示:::
符号说明:双冒号为方法引用运算符,而它所在的表达式被称为方法引用
:: 方法引用解决
import java.util.function.Consumer;
/**
* 案例描述:求解数组中元素的和
* 存在的问题:lambda表达式中逻辑过于复杂
* 改进方法:通过方法引用降低冗余,提升效率
*/
public class Demo{
public static void main(String[] args) {
sum(FunctionRefTest01::method);
}
public static int method(int[] arr){
int sum = 0;
for (int i : arr) {
sum += i;
}
System.out.println("数组之和:" + sum);
return sum;
}
public static void sum(Consumer<int[]> consumer){
int[] a= {1,1,1,1,1,1};
consumer.accept(a);
}
}
结果展示:
三.方法引用基本方式
方法引用在JDK8中使用是相当灵活的,有以下几种形式:
-
instanceName::methodName->对象::方法名
-
ClassName::staticMethodName-> 类名::静态方法
-
ClassName::methodName->类名::普通方法
-
ClassName::new->类名::new 调用的构造器
-
数组类型[]::new->String[]::new 调用数组的构造器
四.总结
方法引用是为了简化lambda中存在太多冗余或者重复的代码,更加简洁,方便使用。