java8-lambda表达式

lambda表达式,允许函数将另一个函数作为参数传入。

第一次听到lambda表达式,我想到的是原来js的回调函数写法,当然现在js的回调好像用得已经不多,es6之后大家更多采用的是Promise的写法。接下来看看lambda表达式具体怎么写。

/**
 * 允许把函数作为一个方法的参数(函数作为参数传递进方法中
 */
public class Lambda {

    public static void main(String[] args) {
        log("10 + 5 = " + curOperate(10, 5, addition));
        log("10 - 5 = " + curOperate(10, 5, subtraction));
        log("10 x 5 = " + curOperate(10, 5, multiplication));
        log("10 / 5 = " + curOperate(10, 5, division));
    }

    private static void log(String s) {
        System.out.println(s);
    }

    interface MathOperation {
        int operation(int a, int b);
    }

    /**
     * 入参不用类型声明
     */
    static MathOperation subtraction = (a, b) -> a - b;

    /**
     * 入参用类型声明
     */
    static MathOperation addition = (int a, int b) -> a + b;

    /**
     * 返回值放到大括号里面
     */
    static MathOperation multiplication = (int a, int b) -> {
        return a * b;
    };

    /**
     * 返回值不放到大括号,直接返回
     */
    static MathOperation division = (int a, int b) -> a / b;

    private static int curOperate(int a, int b, MathOperation mathOperation) {
        return mathOperation.operation(a, b);
    }

}

先讲一下MathOperate这个接口。我们看到MathOperation有一个方法:operate。其入参是两个int类型的参数,返回值也是int类型。那么我们再当前类里面给出了operation的4个实现。这4个实现的写法也是不同于java8之前接口的写法。之前我们可能会写一个继承接口的类,然后对方法进行实现。类似于下图

public interface MathOperation {
    int operation(int a, int b);
}

但是java8中,接口里面只有一个抽象方法的时候可以直接使用lambda映射到该方法。所以我们可以直接用一行代码写出一个实现。addition,substraction,multiplication,division是MathOperation的4个实现。

最后的curOperation为我们展示了接口的调用,结果就不展示了。Lambda应该说是一个语法糖,简化了部分代码量。

 

转载于:https://www.cnblogs.com/tuofan/p/10865043.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值