lambda(二)语法

9 篇文章 0 订阅

java8推出了lambda.

Lambda :可以传递匿名函数的一种方式,没有名称,但是有参数列表,函数主体,返回类型,可能还有一个可以抛出异常的异常列表。

基本语法:

(parameters)->expression

或者:

(parameteres)->{statements;}

随便举几个案列:

布尔表达式           (List<String> list)->list.isEmpty()
组合体               (int a,int b)->a*b
比较两个对象          (Apple a , Apple b)->a.getWeight().compareTo(b.getWeight())

*只有在需要使用函数式接口的时候才能使用Lambda

函数式接口:只定义一个抽象方法的接口。(不管有没有默认的方法,但是只要定义一个)

Lambda表达式允许以直接内联的方式为函数式抽象方法提供实现,并把整个表达式作为函数式接口的实例。->函数式接口就是一个具体实现的实例。

*Lambda表达式的签名必须和抽象方法非签名一致。就是void,int这些,必须对应。

*函数式接口可以在上面写一个@FunctionalInterface标注。该标准表示该接口将会设计成函数式接口。

举个例子:

(1)    execute(() -> {});     
       public void execute(Runnable r){         
       r.run();     
       } 
(2)   public Callable<String> fetch() {         
        return () -> "Tricky example  ;-)";     
        } 
(3)    Predicate<Apple> p = (Apple a) -> a.getWeight(); 

这是书上的一个列子,问哪个Lambda表达式是正确的,答案是1和2.因为需要签名一致第一个例子有效,是因为Lambda() -> {}具有签名() -> void,这和Runnable中的 抽象方法run的签名相匹配。请注意,此代码运行后什么都不会做,因为Lambda是空的! 第二个例子也是有效的。事实上,fetch方法的返回类型是Callable<String>。 Callable<String>基本上就定义了一个方法,签名是() -> String,其中T被String代替 了。因为Lambda() -> "Trickyexample;-)"的签名是() -> String,所以在这个上下文 中可以使用Lambda。 第三个例子无效,因为Lambda表达式(Apple a) -> a.getWeight()的签名是(Apple) -> Integer,这和Predicate<Apple>:(Apple) -> boolean中定义的test方法的签名不同。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值