当要传递给lambda体的操作,已经有实现的方法了,可以使用方法引用
方法引用可以看做是Lambda表达式深层次的表达。换句话说,方法引用就是lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖
实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致
使用操作符::将类(或对象 )与方法名分隔
主要使用情况
- 对象::实例方法名
@Test
public void test1() {
Consumer consumer = str -> System.out.println(str);
consumer.accept("chengdu");
// 方法引用
Consumer consumer1 = System.out::println;
consumer1.accept("chengdu");
}
类::静态方法名
@Test
public void test2() {
// 通过类调用静态方法
// List personList1 = Person.getPersonList();
// 方法引用
Supplier> supplier = Person::getPersonList;
List personList = supplier.get();
System.out.println(personList.size());
}
类::实例方法名
@Test
public void test3() {
List personList = Person.getPersonList();
for (Person person : personList) {
// 方法引用
Supplier supplier = person::getName;
System.out.println(supplier.get());
}
}
@Test
public void test4() {
// lambda 表达式
Comparator comparator = (t1, t2) -> Integer.compare(t1, t2);
int result = comparator.compare(1, 2);
System.out.println(result);
// 方法引用
Comparator comparator1 = Integer::compare;
int result1 = comparator1.compare(2, 1);
System.out.println(result1);
}



