Java 8 Lambda
Lambda表达式(也称为闭包) 是整个Java 8发行版本中最受期待的, 在Java语言层面上的改变, Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中), 或者把代码看成数据. Lambda表达式用于简化JAVA中接口式的匿名内部类. 被称为函数式接口的概念. 函数式接口就是一个具有一个方法的普通接口. 像这样的接口, 可以被隐式转换为Lambda表达式.
语法: (参数1,参数2....) -> {...};
应用场景: 只有一个抽象方法的接口, 接口中的默认方法和静态方法并不影响函数式接口的契约, 可以任意使用(如下,JDK1.8以后可以使用, 之前不可以使用)
interface Play{
public void play();
public default void play6(){
System.out.println("default method");
}
public static void method(){
System.out.println("static method");
}
}
1. 测试Demo:
package cesi.tomcat.util;
/**
* Created by gailun on 2018/10/30.
*/
public class LambdaDemo {
public static void main(String[] args) {
Play play = new PlayImpl();
play.play();
//内部类
Play play1 = new Play() {
@Override
public void play() {
System.out.println("play play1");
}
};
play1.play();
//Lambda表达式
//好处:1代码更简洁, 2不会单独生成class文件
/*Play play2 = () -> {
System.out.println("play play2");
};*/
Play play2 = () -> System.out.println("play play2");
play2.play();
//带参数时使用,参数的类型可以省略; 代码块中有多行代码时,大括号不可以省略
//Visitor visitor = (String name) -> System.out.println("visitor..."+name);
Visitor visitor = (name) -> System.out.println("visitor..."+name);
visitor.visitor("张三");
//带返回值的方法
Leave leave = (name,age) -> {
System.out.println(name+"的年龄是:"+age);
return 18;
};
leave.leave("张三",18);
//带返回值的方法中只有一句实现代码
Leave leave1 = (name,age) -> 10;
//参数中使用final关键字
Send send = (final String name,final Integer age) -> 16;
}
//只有一个抽象方法的接口
interface Play{
public void play();
}
static class PlayImpl implements Play{
@Override
public void play() {
System.out.println("play play");
}
}
interface Visitor{
public void visitor(String name);
}
interface Leave{
public int leave(String name,Integer age);
}
interface Send{
public int send(final String name,final Integer age);
}
}
执行结果:
注意: Lamdba表达式是一个函数, 编译后不产生class文件
2. Lamdba简化类比较器
Student[] students = {new Student("李太白",18),
new Student("张大宝",16),
new Student("大侠我",21)};
/*Arrays.sort(students, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();
}
});*/
//Comparator<Student> c = (o1,o2) -> o1.getAge() - o2.getAge();
//Arrays.sort(students,c);
Arrays.sort(students,(o1,o2) -> o1.getAge() - o2.getAge());
System.out.println(Arrays.toString(students));
执行结果: