Java8 方法引用简单介绍与使用

方法引用

方法引用:
可以理解为Lambda表达式的语法糖。
我们可以把方法引用看作 一个 函数指针
方法引用共分为 4钟

  1. 类名::静态方法名
@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);
    }
  1. 引用名(对象名)::实例方法名
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);
    }
  1. 类名::实例方法名
@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);
   }
  1. 类名::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);
}

猜你喜欢

转载自blog.csdn.net/weixin_43939924/article/details/110281362