版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhiwenyan/article/details/70507489
本篇博客写2个练习,巩固下lambda表达式,如果你还不了解lambda,请看这http://blog.csdn.net/zhiwenyan/article/details/70478193
先介绍下函数式接口,以后的博客会着重介绍。
什么是函数式接口
- 只包含一个抽象方法的接口,称为函数式接口。
- 可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明)。
- 我们可以在任意函数式接口上使用 @FunctionalInterface 注解, 这样做可以检查它是否是一个函数式接口,同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。
需求1:声明一个函数式接口,对一个数运算,接口中的方法返回这个数的值
声明一个函数式接口:
public interface myFunc {
public Integer getValue(Integer num);
}
//声明一个方法,使用接口作为参数
private Integer operation(int x, myFunc fun) {
return fun.getValue(x);
}
使用Lambda的方式
Integer result = operation(100, x -> x * x);
System.out.println(result);
使用匿名内部类
Integer res = operation(10, new myFunc() {
@Override
public Integer getValue(Integer num) {
return num * num;
}
});
System.out.println(res);
需求2:声明一个函数式是接口,泛型的类型为<T,R>
参数,R为返回值;接口声明对应的抽象方法;声明一个方法,使用接口作为参数,计算2个Long参数和的值。
// 声明一个方法,使用接口作为参数
private void op(Long l1, Long l2, myFunc1<Long, Long> fun) {
System.out.println(fun.getValue(l1, l2));
}
// 声明一个函数是接口,泛型的类型为<T,R> 为参数,R为返回值;接口声明对应的抽象方法
public interface myFunc1<T, R> {
R getValue(T t1, T t2);
}
使用Lambda的方式
op(100L, 100L, (l1, l2) -> l1 + l2);
使用匿名内部类
op(100L, 100L, new myFunc1<Long, Long>() {
public Long getValue(Long t1, Long t2) {
return t1+t2;
};
});
Lambda表达式2个要素
1是->运算符前的参数;
2是->运算符后的功能;