java8:lambda表达式强化练习

版权声明:本文为博主原创文章,未经博主允许不得转载。 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是->运算符后的功能;

猜你喜欢

转载自blog.csdn.net/zhiwenyan/article/details/70507489
今日推荐