—–通过学习尚硅谷视频所得—–

方法引用

使用lambda创建匿名方法,有时候,lambda表达式只是调用一个已存在的方法,不做其他任何事,这种情况,通过一个方法名字来引用已存在的方法会更加清晰.

注意方法引用是一个Lambda表达式,其中方法引用的操作符是双冒号”::”。
主要有三种语法格式:

对象::实例方法名

PrintStream ps=System.out;
Consumer<String> con1=ps::print;
con1.accept("adcdef");

类::静态方法名

Comparator<Integer> com1=Integer::compare;

类::实例方法名

BiPredicate<String,String> bp2=String::equals;

关于方法引用, 感觉这篇博客写的不错: javascript:void(0)

构造器引用

与函数式接口相结合,自动与函数式接口中方法兼容。可以把构造器引用赋值给定义的方法,与构造器参数列表要与函数式接口中抽象方法的参数列表一致!
格式: ClassName::new

调用无参构造器

// lambda调用方式
Supplier<Employee> sup=()-> new Employee();
//构造器引用方式
Supplier<Employee> sup2=Employee::new;

调用一个参数构造函数

//lambda调用方式
Function<Integer,Employee> fun=(x)->new Employee(x);
//构造器引用方式
Function<Integer,Employee> fun2=Employee::new;
数组引用

Type::new

//lambda表达式
Function<Integer,String[]> fun = (x) -> new String[x];
String[] str= fun.apply(10);
//数组引用方式
Function<Integer,String[]> fun2=String[]::new;
String[] str2=fun2.apply(20);