Lambda表达式的省略写法
参数类型可以省略不写 如果只有一个参数,参数类型可以省略,同时 ()也可以省略
如果Lambda表达式的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号。
如果Lambda表达式的方法体代码只有一行代码,可以省略大括号不写,此时如果这行代码是return语句,必须省略return不写,同时也必须省略 ”;” 不写
JDK8新特性: 方法引用
静态方法的引用
类名 :: 静态方法
如果某个Lambda表达式里只是调用一个静态方法,并且前后参数的形式一致,就可以使用静态方法引用
Arrays.sort(students,(o1, o2) -> CompareByData.compareAsc(o1,o2));
Arrays.sort(students,CompareByData::compareAsc);
实例方法的引用
对象名 :: 实例方法
如果某个Lambda表达式里只是调用一个实例方法,并且前后参数的形式一致,就可以使用实例方法引用
CompareByData compareByData = new CompareByData();
Arrays.sort(students,(o1, o2) -> compareByData.compareDESC(o1,o2));
Arrays.sort(students,compareByData::compareDESC);
特定类型方法的引用
类型 :: 方法
如果某个Lambda表达式里只是调用一个实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用
Arrays.sort(names,(o1,o2) -> o1.compareToIgnoreCase(o2));
Arrays.sort(names, String::compareToIgnoreCase);
构造器引用
类名 :: new。
如果某个Lambda表达式里只是在创建对象,并且前后参数情况一致,就可以使用构造器引用
interface createStudent{
Student create(String name, int age);
}
createStudent createStudent2 = (name, age) -> new Student(name, age);
createStudent2.create("王五",13);
createStudent createStudent3 = Student::new;
createStudent3.create("王五",13);