JDK8新特性-Lambda

Funda-men-tally, a lambda expression is just ashorter way of writing an implementation of a method for laterexecution.

Lambda延时执行的一种简短的方法实现。所谓延时,即运行时才会生成类文件,编译时并不会生成,这也是他和内部类的最大区别.


为了配合lambdaJDK8引入了一个新的定义叫做:函数式接口

所谓函数式接口:

itis an interface that requires exactly one method to be implemented in order to

satisfytherequirements of the interface. 

1)是一个接口

2)只有一个待实现的方法

jdk8开始,接口可以有default方法,所以,函数式接口也是可以有default方法的

是,只能有一个未实现的方法

函数式接口是非常脆弱的,只要有人在接口里添加多一个方法,那么这个接口就不是函数接口了,就会导致编译失败。

Java8提供了一个特殊的注解@FunctionalInterface来克服上面提到

的脆弱性并且显示地表明函数接口的目的(java里所有现存的接口都已

经加上了@FunctionalInterface

java.lang.Runnable java.util.concurrent.Callable 是函数接口两个 最好的例子 .

Lambda的基本语法:

(Type1param1, Type2 param2, ..., TypeNparamN)->{

    statment1; 

    statment2; 

    //............. 

    returnstatmentM

}

JVM会根据lambda的上下文推断出具体是某个接口,再去调用该接口的某个方法,这说的接口都是函数式接口,也就能确定唯一一个未实现的接口。

下面我们看一下Lambda的一些使用实例,一般都会结合Stream使用。

List<Person> list = new ArrayList<Person>();
list.add(new Person(12,"abc"));list.add(new Person(15,"cdf"));
list.stream().forEach(x -> System.out.println(x));
list.stream().filter(x->x.getName().contains("a")).forEach(x-> System.out.println(x));
list.stream().map(x->x.getAge()).forEach(x-> System.out.println(x));
list.stream().map(x->x.getAge()).filter(x->x>13).forEach(x-> System.out.println(x));

Jdk8在接口中增加了默认方法和静态方法两个概念。

这个两个方法必须在接口中提供方法体,这是他们于传统抽象接口最大的区别,同时,默认方法可以由接口的实现方重写。

优点:默认方法的出现,允许我们可以在现有接口中添加新的方法,而不会破坏实现这个接口的已有类的兼容性,也就是说,该接口的众多实现方并不需要做相应的修改。 java.util.Collection 中添加的额外方法就是最好的例子: stream() parallelStream () forEach () removeIf ()




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值