标签:ref lda local ready 类型 代码 lambda 应用 www
我们知道了什么是Lambda Expression以及如何使用,那么,Method References又是什么呢?Oracle Java Docs中这样说:
They are compact, easy-to-read lambda expressions for methods that already have a name.
也就是说,它是把已经定义好的有名字的方法,当作Lambda Expression来使用。
通过一个例子来看:有一个数组,里面放了一堆Person对象,现在想要对它根据生日进行排序。
Person类
public class Person {
LocalDate birthday;
public Calendar getBirthday() {
return birthday;
}
public static int compareByAge(Person a, Person b) {
return a.birthday.compareTo(b.birthday);
}
}
常规写法
Person[] rosterAsArray = roster.toArray(new Person[roster.size()]);
class PersonAgeComparator implements Comparator<Person> {
public int compare(Person a, Person b) {
return a.getBirthday().compareTo(b.getBirthday());
}
}
Arrays.sort(rosterAsArray, new PersonAgeComparator());
Lambda Expression写法1:手动比较两个Date
Arrays.sort(rosterAsArray,
(Person a, Person b) -> {
return a.getBirthday().compareTo(b.getBirthday());
}
);
分析这个Lambda Expression
我们发现,对于右边,不一定要调用Date.compareTo()方法,其他任意自定义的方法都可以,只需要满足输入输出参数一致即可。
正好,Person类里面已经定义了一个compareByAge()方法可以直接拿过来替换。于是,可以改成这样:
Lambda Expression写法2:调用已经定义好的方法
Arrays.sort(rosterAsArray,
(Person a, Person b) -> {
return Person.compareByAge(a, b);
}
);
再对其分析,可以发现,左边(Person a, Person b)其实是冗余信息,因为右边Person.compareByAge(a, b)方法已经定义好了输入输出。
所以,上面的代码可以简化如下:
Method Reference写法
Arrays.sort(rosterAsArray, Person::compareByAge);
Method Reference有以下几种类型:
标签:ref lda local ready 类型 代码 lambda 应用 www
原文地址:http://www.cnblogs.com/maxstack/p/7891827.html