方法引用
方法引用:
可以理解为Lambda表达式的语法糖。
我们可以把方法引用看作 一个 函数指针
方法引用共分为 4钟
- 类名::静态方法名
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private String name;
private Integer age;
private Integer score;
public static int compareStudentByscore(Student student1, Student student2) {
return student1.getScore() - student2.getScore();
}
}
示例代码:
public static void main(String[] args) {
Student lb = Student.builder().name("lb").score(100).build();
Student df = Student.builder().name("df").score(10).build();
Student bjy = Student.builder().name("bjy").score(70).build();
Student jg = Student.builder().name("jg").score(90).build();
List<Student> students = Arrays.asList(lb, df, bjy, jg);
// 传统方式
students.sort((o1, o2) ->
Student.compareStudentByscore(o1, o2)
);
students.forEach(o -> System.out.println(o));
// -------------------------------
// 方法引用 类名::静态方法名
students.sort(Student::compareStudentByscore);
students.forEach(System.out::println);
}
- 引用名(对象名)::实例方法名
public class StudentComparator {
public int compareStudentByscore(Student student1, Student student2) {
return student1.getScore() - student2.getScore();
}
}
示例代码:
public static void main(String[] args) {
Student lb = Student.builder().name("lb").score(100).build();
Student df = Student.builder().name("df").score(10).build();
Student bjy = Student.builder().name("bjy").score(70).build();
Student jg = Student.builder().name("jg").score(90).build();
List<Student> students = Arrays.asList(lb, df, bjy, jg);
StudentComparator studentComparator = new StudentComparator();
// 传统方法
students.sort((o1, o2) ->
studentComparator.compareStudentByscore(o1, o2)
);
students.forEach(o -> System.out.println(o));
// -------------------------------
// 方法引用 引用名(对象名)::实例方法名
students.sort(studentComparator::compareStudentByscore);
students.forEach(System.out::println);
}
- 类名::实例方法名
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Student2 {
private String name;
private Integer age;
private Integer score;
public int compareStudentByscore(Student2 student1) {
return this.getScore() - student1.getScore();
}
}
示例代码:
public static void main(String[] args) {
Student2 lb = Student2.builder().name("lb").score(100).build();
Student2 df = Student2.builder().name("df").score(10).build();
Student2 bjy = Student2.builder().name("bjy").score(70).build();
Student2 jg = Student2.builder().name("jg").score(90).build();
List<Student2> students = Arrays.asList(lb, df, bjy, jg);
// 传统方法
students.sort((o1, o2) ->
o1.compareStudentByscore(o2)
);
students.forEach(o -> System.out.println(o));
// -------------------------------
// 方法引用 类名::实例方法名
students.sort(Student2::compareStudentByscore);
students.forEach(System.out::println);
}
- 类名::new
public class MethodReferenceTest3 {
public String getSting(Supplier<String> supplier) {
return supplier.get() + "test";
}
}
示例代码:
public static void main(String[] args) {
MethodReferenceTest3 methodReferenceTest3 = new MethodReferenceTest3();
// 传统方式
methodReferenceTest3.getSting(() -> {
return new String();
});
// 方法引用 类名::new
methodReferenceTest3.getSting(String::new);
}