使用lambda方法引用可以使你的lambda表达式更简洁
1.示例代码
public class Employee {
private int id;
private String name;
private int age;
private double salary;
public Employee() {
}
public Employee(String name) {
this.name = name;
}
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
public Employee(int id, String name, int age, double salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + "]";
}
2.方法测试类以及对应代码片段的解释
public class Test {
public static void main(String[] args) {
/**
* 方法引用的第一种方式
* 对象::实例方法
* 注意:接口的抽象方法的参数和返回值必须和实例方法的参数和返回值类型保持一致
*/
Consumer<String> con =(e)-> System.out.println(e) //普通的lambda表达式
Consumer<String> con = System.out::println; //lambda方法引用方式
con.accept("hello lambda");
该代码片段的输出值为:hello lambda
Employee employee = new Employee();
Supplier<Integer> sup = () -> employee.getAge(); //普通的lambda表达式
Supplier<Integer> sup = employee::getAge; //lambda方法引用方式
Integer age = sup.get();
System.out.println(age);
该代码片段的输出值为:0
/*-----------------------------------------*/
/**
* 方法引用的第二种方式
* 类名::静态方法名
* 注意:接口的抽象方法的参数和返回值必须和实例方法的参数和返回值类型保持一致
*/
Comparator<Integer> com = (x,y)->Integer.compare(x,y) //普通的lambda表达式
Comparator<Integer> com = Integer::compare; //lambda方法引用方式
int compare = com.compare(1, 2);
System.out.println(compare);
该代码片段的输出值为:-1
/*-----------------------------------------*/
/**
* 方法引用第三种方式
* 类名::实例方法名
* 注意:若Lambda 参数列表中的第一个参数是实例方法的调用者,而第二个参数是实例方法的参数时才可以使用
* 这种方式
*/
BiPredicate<String, String> bp =(x,y)->x.equals(y); //普通的lambda表达
BiPredicate<String, String> bp = String::equals; //lambda方法引用方式
boolean test = bp.test("哈哈", "哈哈");
System.out.println(test);
该代码片段的输出值为:true
}