Java lambda表达式

lambda表达式
lambda表达式是一种只拥有一个函数式接口的方法的叫法,可以简化封装。
函数式接口
在lisp这样的函数式编辑语言中,可以简单地把函数当作参数传递。在java中,由于函数不是对象,故不能直接当作参数传递。但可以通过函数式接口实现函数传递。
package foo;

public interface Func {
    public double apply(double x);
}
ps. 函数式接口只拥有一个抽象方法的接口
函数式接口的封装
  • 截止java7,对抽象方法进行override
Func g = new Func(){
    @Override
    public double apply(double x) {
        return x * x;
    }
};
  • 在java8,上面的代码可以简写成如下
Func f = x -> x * x;
或者
Func f = (x) -> {return x * x;};
基本写法 (参数1, 参数2, ...) -> {处理1; 处理2; ...} 可以不传递参数,空处理也可以写成 () -> {} 通过函数式接口可以将原来override的方法简单地实现出来。 下面让我们通过例子来了解函数式接口的真正威力。
package foo;

public class FuncUser {
    public static void samplePrintFunc(Func f) {
        for(double x = 1.0; x <= 3.0; x += 1.0) {
            System.out.println(f.apply(x));
        }
    }
}
可以简单写成
FuncUser.samplePrintFunc(x -> x * x);
也可以换成别的处理逻辑
FuncUser.samplePrintFunc(x -> Math.sin(x));
稍微复杂的逻辑时
FuncUser.samplePrintFunc(x -> { a = Math.sin(x); b = Math.cos(x); return a * b; });
当函数式接口的参数类型和方法的参数相同时,连参数也可以省略掉,简写如下
原: FuncUser.samplePrintFunc(x -> Math.sin(x));
简写后: FuncUser.samplePrintFunc(Math::sin);
以上就是lambda函数式将函数作为参数传递的强力写法。

查看原文:https://www.huuinn.com/archives/319
更多技术干货:风匀坊
关注公众号:风匀坊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值