首页 > 程序开发 > 软件开发 > 其他 >

java8:lambda表达式强化练习

2017-04-24

java8之lambda表达式强化练习:本篇博客写2个练习,巩固下lambda表达式,如果你还不了解lambda,请看这http: blog csdn net zhiwenyan article details 70478193。

java8之lambda表达式强化练习:本篇博客写2个练习,巩固下lambda表达式,如果你还不了解lambda,请看这https://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:声明一个函数式是接口,泛型的类型为参数,R为返回值;接口声明对应的抽象方法;声明一个方法,使用接口作为参数,计算2个Long参数和的值。

// 声明一个方法,使用接口作为参数
private void op(Long l1, Long l2, myFunc1 fun) {
    System.out.println(fun.getValue(l1, l2));
}

// 声明一个函数是接口,泛型的类型为 为参数,R为返回值;接口声明对应的抽象方法
public interface myFunc1 {
    R getValue(T t1, T t2);
}

使用Lambda的方式

op(100L, 100L, (l1, l2) -> l1 + l2);

使用匿名内部类

op(100L, 100L, new myFunc1() {
    public Long getValue(Long t1, Long t2) {
        return t1+t2;
    };
});

Lambda表达式2个要素

1是->运算符前的参数;
2是->运算符后的功能;

相关文章
最新文章
热点推荐