在使用Lambda表达式时,Java中规定了四种情况的简写方式,使得代码更加简洁!
假设创建了一个学生类和一个学生对象
public class Student implements Comparable<Student> {
int score;
String name;
@Override
public int compareTo(Student o) {
return this.score - o.score;
}
public Student() {
}
public Student(int score, String name) {
this.score = score;
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class text3 {
public static void main(String[] args) {
//自定义比较规则
Student s1 = new Student(35,"hh");
}
}
1.静态方法的引用
格式
类名 :: 静态方法
如果Lambda表达式只是调用一个静态方法,并且前后参数的形式一致,就可以使用静态方法引用。
例如:
在自定义排序规则时可能会出现下面的代码,
简化前:
ArrayList<Student> students = new ArrayList<>;
Arrays.sort(students,(o1 , o2) -> CompareByDate.compareByAge(o1 , o2));
引用静态方法简化后:
Arrays.sort(students,CompareByDate::compareByAge);
2.实例方法的引用
格式
对象名 :: 实例方法
如果Lambda表达式只是调用一个实例方法,并且前后参数的形式一致,就可以使用实例方法引用。
例如:
简化前:
ArrayList<Student> students = new ArrayList<>;
Student s = new Student();
Arrays.sort(students,(o1 , o2) -> s.compareByAge(o1 , o2));
引用实例方法简化后:
Arrays.sort(students,s::compareByAge);
3. 特定类型的方法引用
格式
类型 :: 方法
如果Lambda表达式只是调用一个实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的参数都作为该实例方法的入参,就可以使用特定类型的方法引用。
String[] s = new String[]{"hhh","h","kk","jjjj","uuu"};
Arrays.sort(s, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
});
4.构造器引用
格式
类名 :: new
如果Lambda表达式只是在创建对象,并且前后参数情况一致,就可以使用构造器引用。
简化前:
s -> new Student(s);
简化后:
Student :: new;