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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值