Java lambda表达式

来源:互联网 发布:c语言笔试题大一带答案 编辑:程序博客网 时间:2024/06/06 08:25

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
更多技术干货:风匀坊
关注公众号:风匀坊