1. 基本语法
1.1. 如果箭头操作符右边只有一行执行语句,可以省略{} 或者有返回值也可以省略return
Comparator<String> com = (x, y) -> x.compareTo(y)
1.2. 箭头操作符左边的参数有两个或两个以上,右边有不止一行执行语句,甚至有返回值
Comparator<String> com = (x, y) -> {
System.out.println("比较两个String的大小");
return x.compareTo(y);
}
1.3. 箭头操作符左边的参数只有一个,一对()也可以省略
Consumer<String> con = s -> System.out.println(s);
con.accept("atguigu");
2. 方法的引用
只有当lambda表达式的体只调用一个方法而不做其他操作的时候,才能把lambda重新为方法引用
2.1. object::instanceMethod
向方法传递参数的lambda表达式
Supplier<String> sup = () -> emp.getName();
System.out.println(sup.get());
Supplier<Integer> sup1 = emp::getId;
System.out.println(sup1.get());
2.2. Class::instanceMethod
当需要引用方法的第一个参数是调用者(隐式参数)
并且第二个参数是需要引用方法的第二个参数(或无参数)时:ClassName::methodName
BiPredicate<String, String> pre = (s1, s2) -> s1.equals(s2);
System.out.println("************");
BiPredicate<String, String> pre1 = String::equals;
2.3. Class::staticMethod
所有的参数都传递到静态方法
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
System.out.println(com.compare(12, 34));
Comparator<Integer> com1 = Integer::compare;
System.out.println(com1.compare(12, 34));
3. 构造器引用
要求函数式接口中的抽象方法的形参列表与具体的构造器的形参列表一致
要求函数式接口中的抽象方法的返回值类型即为构造器所在类的类型
3.1. 无参数构造器
Supplier<Employee> sup = () -> new Employee();
System.out.println(sup.get());
Supplier<Employee> sup1 = Employee::new;
System.out.println(sup1.get());
3.2. 一参数构造器
Function<String, Employee> func = s -> new Employee(s);
Function<String, Employee> func1 = Employee::new;
Employee emp = func1.apply("Tom");
System.out.println(emp);
3.3. 二参数
BiFunction<Integer, String, Employee> bi = (id,name) -> new Employee(id,name);
Employee emp1 = bi.apply(1001, "成吉思汗");
System.out.println(emp1);
BiFunction<Integer, String, Employee> bi1 = Employee :: new;
Employee emp2 = bi.apply(1002, "忽必烈");
System.out.println(emp2);
4. 数组引用
格式:类型[] :: new
Function<Integer, String[]> func = num -> new String[num];
String[] strs = func.apply(10);
System.out.println(strs.length);
System.out.println("***********************");
Function<Integer, String[]> func1 = String[]::new;