方法引用:把已经有的方法拿过来用,但做函数式接口抽象方法的方法体
Integer[] arr={4,5,2,1,3,6};
//匿名内部类
// Arrays.sort(arr, new Comparator<Integer>() {
// @Override
// public int compare(Integer o1, Integer o2) {
// return o2-o1;
// }
// });
//lambda表达式
// Arrays.sort(arr,(o1, o2) ->
// o2-o1);
// System.out.println(Arrays.toString(arr));
//方法引用
//1.引用处必须是函数式接口
//2.被引用方法必须已经存在
//3.被饮用方法的形参和返回值需要跟抽象方法的形参和返回值保持一致
//4.被引用方法的功能需要满足当前要求
Arrays.sort(arr,text16::subtraction);
System.out.println(Arrays.toString(arr));
}
public static int subtraction(Integer o1,Integer o2){
return o1-o2;
}
}
总结
1.什么是方法引用?
把已经存在的方法拿过来用,当做函数式接口中抽象方法的方法体
2.::是什么符号?
方法引用符
3.方法引用时要注意什么?
需要有函数式接口
被引用方法必须已经存在
被引用方法的形参和返回值需要跟抽象方法保持一致
被引用方法的功能要满足当前的需求
方法引用的分类
1.引用静态方法:
格式:类名::静态方法
练习
package lianxi;
import java.util.ArrayList;
import java.util.Collections;
public class text17 {
public static void main(String[] args) {
ArrayList<String> lis=new ArrayList<>();
Collections.addAll(lis,"1","2","3","4","5");
lis.stream().map(Integer::parseInt).forEach(s-> System.out.println(s));
}
}
2.引用成员方法
格式:对象::成员方法
1. 其他类:其他类对象::方法名
2.本类:this::方法名
3.父类:super::方法名
3.引用构造方法
格式:类名::new
4,引用数组的构造方法
格式:数据类型[ ]::new