lambda表达式与函数式接口

lambda表达式时一个可传递的代码块,可以在以后执行一次或多次。

lambda表达式的语法:

(传入参数,传入参数......)->一个表达式或者一段代码块

例如:

(String first,String second)->first.length()-second.length();

(String first,String second)->{
    if(first.length()<second.length())return -1;
    else if(first.length()>second.length())return 1;
    else return 0;
}

有两个需要注意的地方。一是如果是代码块的话必须有显性的return语句。其次,可以没有参数,就像无参方法一样。

lambda表达式可以嵌入需要它的地方,就像作为参数放在方法中(前提是该方法需要的参数于lambda表达式的返回值一致。)

再者,如果可以推导lambda表达式的类型,就可以忽略他的类型。

例如:

Comparator<String> comp=(first, second)->first.length()-second.length();
//省略了(String first,String second)中的类型

其中Comparable接口的源码:

public interface Comparator<T> {
    int compare(T o1, T o2);//这里只展示了compare方法
}

这段代码的意思就是创建了一个Comparable<String>类型的对象,它的compareTo方法就是lambda表达式的内容。通过Comparable接口的泛型确定了compareTo方法传入参数的类型,也就是lambda表达式传入的类型是String,就可以省略String 类型了。

(泛型也是个需要复习的点,说不定以后我还会写一篇文章介绍/复习一下)

好了,这就学完了lambda表达式,接下来只要会应用就行了。

———————————————————————————————————————————

lambda表达式的变量作用域

lambda表达式可以捕获外围作用域中的变量的值,并且只能引用而不会改变变量的值

———————————————————————————————————————————

函数式接口应该是lambda表达式很重要的应用了。

对于只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个lambda表达式。这种接口称为函数式接口。

例子:快拉上去看那个Comparator接口。没错,Comparator就是一个函数式接口。

有一种Arrays.sort()方法,它的第二个参数需要一个Comparator实例,这个Comparator就可以提供一个lambda表达式实现。即:

Arrays.sort(words,(first,second)->first.length()-second.length());

原本的写法是:

Comparator<String> comp=(first, second)->first.length()-second.length();

Arrays.sort(words,comp);

除了函数式接口,lambda表达式还能用在方法引用构造器引用中。

———————————————————————————————————————————

笔者文字功底有限,这里引用《JAVA核心技术》书中的原话。第一次写文章还挺累的...欢迎大家讨论留言,受水平约束,有不对的地方欢迎指出!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值