方法引用
方法引用:若lambda体中的内容有方法已经实现了,则可以直接引用
主要有三种格式:
- 对象::实例方法名
- 类::静态方法名
- 类::实例方法名
lambda表达式引用的函数无论是返回值还是参数都得与函数式接口保持一致,特别的,第三种格式要求(当第一个参数是实例方法的调用者,第二个参数是实例方法的参数时,才可以使用)
(1)对象::实例方法名
/*
* 对象::实例方法名
*/
@Test
public void test() {
PrintStream ps = System.out;
Consumer<String> con = null;
//形式一
con = (x) -> System.out.println(x);
con.accept("form_1");
//形式二
con = (x) -> ps.println(x);
con.accept("form_2");
//形式三
con = System.out::println;
con.accept("form_3");
//形式四
con = ps::println;
con.accept("form_4");
}
(2)类::静态方法名
/*
* 类::静态方法名
*/
@Test
public void test2() {
//形式一
Comparator<Integer> cp1 = (x,y) -> Integer.compare(x, y);
System.out.println(cp1.compare(3, 5));
//形式二
Comparator<Integer> cp2 = Integer::compare;
System.out.println(cp2.compare(34, 34));
}
3. 类::实例方法名
当第一个参数是实例方法的调用者,第二个参数是实例方法的参数时,才可以使用
/*
* 类::实力方法名
*/
@Test
public void test3() {
//形式一
BiPredicate<String, String> bp = (x,y) -> x.equals(y);
System.out.println(bp.test("sss", "sss"));
//形式二
BiPredicate<String, String> bp2 = String::equals;
System.out.println(bp2.test("ddd", "aaa"));
}
}
构造器引用
格式:ClassName::new
注:需要调用的构造器的参数列表需要与函数式接口中的参数保持一致
@Test
public void test() {
//得到无参构造新的Employee
Supplier<Employee> sup = () -> new Employee();
Employee emp = sup.get();
System.out.println(emp);
//得到一个参数的Employee
Function<Integer, Employee> fun = (x) -> new Employee(x);
Employee emp1 = fun.apply(23);
System.out.println(emp1);
//得到一个参数的第二种形式
Function<Integer, Employee> fun2 = Employee::new;
Employee emp2 = fun2.apply(34);
System.out.println(emp2);
//得到两个参数的Employee
BiFunction<Integer, Integer, Employee> bf = Employee::new;
Employee emp3 = bf.apply(34, 60000);
System.out.println(emp3);
}
数组构造
格式:Type::new
@Test
public void test() {
//形式一
Function<Integer, String[]> fun = (x) -> new String[x];
String[] newStrs = fun.apply(9);
System.out.println(newStrs.length);
//形式二
Function<Integer, String[]> fun2 = String[]::new;
String[] newStrs2 = fun2.apply(29);
System.out.println(newStrs2.length);
}
本文详细介绍了Java中Lambda表达式的三种方法引用格式:对象::实例方法名、类::静态方法名、类::实例方法名,以及构造器引用和数组构造的方法。通过具体示例,展示了如何使用这些引用简化代码。

被折叠的 条评论
为什么被折叠?



