标签:ora 构造 列表 text 方法 com cti 静态 lam
一、Java 8 内置的四大核心函数式接口
Consumer<T> :消费型接口
void accept(T t);
Supplier<T> :供给型接口
T get();
Function<T, R> :函数型接口
R apply(T t);
Predicate<T> :断言型接口
boolean test(T t);
二、方法引用
若Lambda体中的内容已经有方法实现了,可以使用方法引用(可以理解为方法引用是Lambda表达式的另一种表现形式)。
主要有三种语法格式:
1. 对象 :: 实例方法名
例1:
PrintStream ps = System.out;
Consumer<String> con = (x) -> ps.println(x);
改:
Consumer<String> con1 = ps::println;
Consumer<String> con2 = System.out::println;
con2.accept("abc");
例2:
Employee emp = new Employee();
Supplier<String> sup = () -> emp.getName();
改:
Supplier<Integer> sup1 = emp::getAge;
Integer num = sup1.get();
2. 类 :: 静态方法名
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
改:
Comparator<Integer> com1 = Integer::compare;
3. 类 :: 实例方法名
BiPredicate<Stirng, String> bp = (x, y) -> x.equals(y);
改:
BiPredicate<String, String> bp2 = String::equals; (对应 注意2))
注意:
1) Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的参数列表和返回值类型保持一致!
2)若Lambda 参数列表中的第一参数是 实例方法的调用者,第二个参数是实例方法的参数时,可以使用ClassName :: method (对象 :: 实例方法名 例:String::equal)
三、构造器引用
格式: ClassName :: new ;
例1:
Supplier<Employee> sup = () -> new Employee();
// 构造器引用方式
Supplier<Employee> sup1 = Employee::new; (调用Employee的无参构造函数)
Employee emp = sup1.get();
例2:
Function<Integer, Employee> fun = x -> new Employee(x); (调用Employee的有一个参数的构造函数)
Function<Integer, Employee> fun1 = Employee::new;
Employee emp1= fun1.apply(10);
注意:需要调用的构造器参数列表要与函数式接口中抽象方法的参数列表保持一致!
四、数组引用
格式: Type[] :: new ;
Function<Integer, String[]> fun = x -> new String[x];
String [] strs = fun.apply(10);
改:
Function<Integer, String[]> fun1 = String[]::new;
String [] strs1 = fun1.apply(20);
标签:ora 构造 列表 text 方法 com cti 静态 lam
原文地址:https://www.cnblogs.com/xzjl-23/p/14289285.html