Java8特性之方法引用
- 方法引用简介
如果在Lambda表达式的具体逻辑处理和某个方法的处理逻辑相同,则可以直接将方法名称指代具体的处理逻辑,从而使得整个Lambda表达式更加的简洁,逻辑更加清晰。
比如: System.out.println
Arrays.asList(1,2,3)
.forEach(
(a) -> System.out.println(a)
);
Arrays.asList(1,2,3)
.forEach(
System.out :: println
);
通过 System.out 的实例方法名来代替整个处理逻辑
- 方法引用分类
静态方法引用
格式:Class :: static Method
实例方法引用
格式:instance :: method
构造器方法引用
格式:Class :: new
对象方法引用
格式:instance :: method(args)
- 方法引用示例
静态方法引用:
Arrays.asList(1,5,3,2,10,8)
.sort(
Integer :: compare
);
通过调用Integer 类的静态比较方法,实现对于List的排序
实例方法引用:
Arrays.asList(1,2,3)
.forEach(
System.out :: println
);
System.out 是PrintStream的实例,而println 是PrintStream的方法。
构造器方法引用:
Supplier
supplier = MethodRef :: new;
Supplier 是一个函数式接口,代表对象结果的提供者角色,内部提供了get()方法,返回具体的对象。
对象方法引用:
BiPredicate
bp =
(a, b) -> a.equals(b);
BiPredicate
bp1 =
String :: equals;
注意:对象方法引用的第一个参数是方法的调用者,第二个参数是方法的参数。