1 定义
Lambda表达式(也称为闭包)是Java 8中最大和最令人期待的语言改变。它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理:函数式开发者非常熟悉这些概念。
很多JVM平台上的语言(Groovy、Scala等)从诞生之日就支持Lambda表达式,但是Java开发者没有选择,只能使用匿名内部类代替Lambda表达式。
Lambda的设计耗费了很多时间和很大的社区力量,最终找到一种折中的实现方案,可以实现简洁而紧凑的语言结构。
最简单的Lambda表达式可由逗号分隔的参数列表、->符号和语句块组成,例如:
Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );
1 Lambda表达式代替的是什么?------- 函数(动作)
2 什么叫做函数式接口
-
可以用@FunctionalInterface修饰的接口且不报错。
- 必须是一个接口
- 必须有且只有一个抽象方法
- 接口中的抽象方法不能是继承的,否则不能当作函数式接口的唯一抽象方法
- 函数式接口不一定要添加@FunctionalInterface注解
3 函数式接口的用途
1 Function
public class Main { public static void main(String[] args) { test01(); } public static void test01() { List<String> list = Lists.newArrayList(); list.add("1"); list.add("2"); list.forEach(o -> { System.out.println(o); }); } public static void test02() { myFunction(o1 -> String.valueOf(o1));//传入什么参数,就返回什么 myFunction((Integer o1) -> String.valueOf(o1));//传入什么参数,就返回什么 myFunction(o1 -> { // 业务代码 return String.valueOf(o1); }); myFunction(o1 -> null); myFunction(o1 -> { return null; }); } public static void myFunction(Function<Integer,String> function) { } }