JDK1.8的Lambda表达式

  Lambda标准格式 Lambda省去面向对象的条条框框,格式由3个部分组成: 
  1.一些参数 2.一个箭头 3.一段代码
  Lambda表达式的标准格式为:(参数类型 参数名称) -> { 代码语句 }
  格式说明:
  1. 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
  2. -> 是新引入的语法格式,代表指向动作。
  3. 大括号内的语法与传统方法体要求基本一致。
  
  Lambda省略格式
  省略规则 在Lambda标准格式的基础上,使用省略写法的规则为:
  1.小括号内参数的类型可以省略;
    (a,b) ‐> { return a + b; }
  2.如果小括号内有且仅有一个参,则小括号可以省略;   
    a ‐> { a=100;return a }
  3.如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。  
    (a,b) ‐> a + b  //return a+b;
    a ‐> a  //return a;
    a ‐> System.out.println(a);
    
  Lambda的使用前提(必须是接口且仅有一个抽象方法。抽象类不行) 
  Lambda的语法非常简洁,完全没有面向对象复杂的束缚。但是使用时有几个问题需要特别注意: 
  1.使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。
    无论是JDK内置的 Runnable、Comparator接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。
  2.使用Lambda必须具有上下文推断。也就是方法的参数或局部变量类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。 
  备注:有且仅有一个抽象方法的接口,称为“函数式接口”。
  
  
  函数式接口 (@FunctionalInterface)
  与 @Override 注解的作用类似,Java 8中专门为函数式接口引入了一个新的注解:@FunctionalInterface 。
  该注解可用于一个接口的定义上:一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错。
  需要注意的是,即使不使用该注解,只要满足函数式接口的定义,这仍然是一个函数式接口,使用起来都一样。
  
  
  方法引用符 (::)
  双冒号 :: 为引用运算符,而它所在的表达式被称为方法引用。
  如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可以通过双冒号来引用该方法作为Lambda的替代者。
  语义分析 
  例如上例中,System.out 对象中有一个重载的 println(String) 方法恰好就是我们所需要的。
  那么对于 printString 方法的函数式接口参数,对比下面两种写法,完全等效:
  Lambda表达式写法:s -> System.out.println(s);   方法引用写法:System.out::println 
  第一种语义是指:拿到参数之后经Lambda之手,继而传递给 System.out.println 方法去处理。 
  第二种等效写法的语义是指:直接让 System.out 中的 println 方法来取代Lambda。两种写法的执行效果完全一样,而第二种方法引用的写法复用了已有方案,更加简洁。
  注:Lambda中传递的参数一定是方法引用中的那个方法可以接收的类型,否则会抛出异常
  
  
  Lambda表达式: n -> Math.abs(n)          方法引用: Math::abs
  Lambda表达式: () -> super.sayHello()    方法引用: super::sayHello
  Lambda表达式: () -> this.buyHouse()     方法引用: this::buyHouse
  Lambda表达式: name -> new Person(name)  方法引用: Person::new
  Lambda表达式: length -> new int[length] 方法引用: int[]::new
  
  
  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值