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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值