【爱上Java8】Java8函数式方法的方法引用

来源:互联网 发布:h5免费制作网站 知乎 编辑:程序博客网 时间:2024/05/18 03:53

Java8里新引入的函数式编程,在不少场合确实可以减少不少代码行数,书写和阅读还是比较方便的。值得提倡。
但是有些地方看起来可能不像以前那么好懂了,比如下面的代码,对字符串进行排序。其中sort的方法签名是:

1
public static <T> void sort(T[] a, Comparator<? super T> c)

但是,实际用的时候,可以传入一个方法引用,String::compareToIgnoreCase,但是这个写法,语法是正确的。
从传统Java的角度看,是无论如何也想不通的,因为Comparator和String::compareToIgnoreCase的签名是不一样的。
但在这里,传入的是一个方法引用,并不是Comparator接口 ,实际上下面的写法等同于:

1
2
3
String[] stringArray = { "Barbara""James""Mary""John",
    "Patricia""Robert""Michael""Linda" };
Arrays.sort(stringArray, String::compareToIgnoreCase);

等同于下面,如果按照下面的写法,就一目了然了吧,实际上是生成了一个匿名方法,这个匿名方法用compareToIgnoreCase来实现,
上面的写法只是省略了参数a,b 而已。个人感觉为了看起来方便,还不如写成下面的样子。不然有些时候,真不好懂呀。

1
2
3
String[] stringArray = { "Barbara""James""Mary""John",
    "Patricia""Robert""Michael""Linda" };
Arrays.sort(stringArray, (a,b)->a.compareToIgnoreCase(b));

0 0
原创粉丝点击