1.概念:Java 8中引入的新工具-Lambda表达式,它可以让你很简洁地表示一个行为或传递代码。现在你可以把Lambda表达式看作匿名功能,它基本上就是没有声明名称的方法,但和匿名类一样,它也可以作为参数传递给一个方法。
2.语法规则
Lambda表达式有三个部分,如图3-1所示。
参数列表 —— 接收传递的参数。
箭头 —— 箭头 -> 把参数列表与Lambda主体分隔开。
主体 —— 比较两个Apple的重量。表达式就是Lambda的返回值了。
例如:(1) () -> {} (2) () -> "Lambda" (3) () -> { return "Lambda ";} (4)(int x, int y) -> { System.out.println("Lambda:"); }
3. 用法
apple 实体类
接口,里面有一个比较的方法
以前,我们可以用匿名内部类,new 接口的实体重写方法来比较
现在我们用Lambda表达式
结果
4.总结
用了lambda后,代码更清晰了,那到底在哪里可以使用Lambda呢?你可以在函数式接口上使用Lambda表达式。在上面的代码中,你可以把 Lambda 表达式作为第三个参数 传给 comp方法,因为它这里需要Comparator,而这是一个函数式接口。如果这听起来太抽象,不要担心,现在我们就来详细解释这是什么意思,以及函数式接口是什么。
函数式接口: 我们这里的Comparator就是一个函数式接口,因为Comparator仅仅定义了一个抽象方法。一言以蔽之,函数式接口就是只定义一个抽象方法的接口。Java API中定义了一些函数式接口
所以上面我们的Comparator接口可以删掉,用java API 的Comparator接口 但是要指明泛型,lambda的参数列表的参数类型可以省略