Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的 代码(将代码像数据一样进行传递)。可以替换匿名内部类,函数式接口。
Lambda 是jdk1.8后有的。
例如:匿名内部类 VS Lambda表达式
//原来使用匿名内部类 TreeSet<Person> ts = new TreeSet<Person>(new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { return o1.getName().compareTo(o2.getName()); } }); //JDK1.8后可以使用Lambda Comparator<Person> com = (x,y)->x.getName().compareTo(y.getName()); TreeSet<Person> ts2 = new TreeSet<Person>(com);
//匿名内部类 Runnable r1 = new Runnable() { @Override public void run() { System.out.println("run..."); } }; //Lambda表达式 Runnable r2 = () -> System.out.println("run...");
Lambda表达式:Java8以后,引入了“->”操作符
“->”左侧:参数列表
“->”右侧:所需要执行的功能,即Lambda体
语法格式一:无参数无返回值 ()-> System.out.println("Hello Lambda "); 语法格式二: 一个参数,无返回 //x表示变量,变量名x任意 (x) -> System.out.println(x); //只有一个参数时,()可以省略 x -> System.out.println(x); 语法格式三:有两个以上的参数,有返回值,并且 Lambda 体中有多条语句 Comparator<Integer> com = (x, y) -> { System.out.println("函数式接口"); return Integer.compare(x, y); }; 语法格式四:若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写 Comparator<Integer> com = (x, y) -> Integer.compare(x, y); 语法格式五:Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断” (Integer x, Integer y) -> Integer.compare(x, y);
********************************