美文网首页
Java8_方法引用

Java8_方法引用

作者: 大鹏_xzlp | 来源:发表于2017-10-28 16:19 被阅读0次

本文主要描述一下什么是方法引用以及方法引用的四种表现形式

  • 方法引用是Lambda表达式的一种语法糖

  • 我们可以将方法引用看做是一个函数指针

  • 方法引用共分为4类:

    1. 类名::静态方法名
    2. 对象名::实例方法名
    3. 类名::实例方法名
    4. 构造方法引用 类名:new

使用场景:Lambda表达式只有一行代码,并且有现成的可以替换

1. 类名::静态方法名:
public class Student {
    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public static int compareStudentByScore(Student s1, Student s2) {
        return s1.score - s2.score;
    }

}

根据学生的分数进行排序

Lambda表达式的参数个数与类型正好和当前类的某个唯一方法需要的参数个数类型完全一致,此时可以用这种方法来替换Lambda表达式

Student s1 = new Student("zhangsan", 12);
Student s2 = new Student("lisi", 60);
Student s3 = new Student("wangwu", 40);
Student s4 = new Student("zhaoliu", 90);

List<Student> list = Arrays.asList(s1, s2, s3, s4);

//使用Lambda表达式的方式
list.sort((student1, student2) -> Student.compareStudentByScore(student1, student2));

/**
 * 类名::静态方法名
 */
list.sort(Student::compareStudentByScore);
2. 对象名::实例方法名
public class StudentCompartor {
    public int compareStudentByScore(Student s1, Student s2) {
        return s1.getScore() - s2.getScore();
    }
}

Lambda表达式的参数个数与类型正好和当前对象的某个唯一方法需要的参数个数类型完全一致,此时可以用这种方法来替换Lambda表达式

StudentCompartor studentCompartor = new StudentCompartor();
//Lambda表达式方式
list.sort((student1, student2) -> studentCompartor.compareStudentByScore(student1, student2));
 /**
 * 对象名::实例方法名
 */
list.sort(studentCompartor::compareStudentByScore);
3. 类名::实例方法名

public class Student {
    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public int compareByScore(Student student) {
        return this.getScore() - student.getScore();
    }
}

使用 类名::实例方法名 这种方式能够替换的Lambda表达式形式为:
Lambda表达式接收的第一个参数为当前类的对象,后面的参数依次为该对象中的某个方法接受的参数。此例中 Lambda表达式是(o1,o2)->o1.compareByScore(o2) 正好符合转换

//Lambda表达式方式
list.sort((o1,o2)->o1.compareByScore(o2));
/**
* 类名::实例方法名
*/
list.sort(Student::compareByScore);
4. 构造方法引用 类名:new

需要调用的构造器的参数列表需要与函数式接口中抽象方法的函数列表保持一致。

System.out.println("----------lambda表达式---------");
Supplier<Student> supplier = () -> new Student();
System.out.println(supplier.get());

System.out.println("-----------使用方法的引用----------");
Supplier<Student> supplier1 = Student::new;
System.out.println(supplier1.get());

相关文章

  • Java8_方法引用

    本文主要描述一下什么是方法引用以及方法引用的四种表现形式 方法引用是Lambda表达式的一种语法糖 我们可以将方法...

  • 2020-07-04【方法引用】

    体验方法引用 方法引用符 引用方式

  • Java8——方法引用和构造器引用

    方法引用和构造器引用 方法引用 若Lambda体中的内容已经有方法实现过了,我们可以使用方法引用(方法引用是Lam...

  • 双冒号方法引用

    类别使用形式静态方法引用类名 :: 静态方法名实例方法引用对象名(引用名) :: 实例方法名类方法引用类名 :: ...

  • Java中的双冒号::是什么玩意?有这个语法?

    简洁 方法引用 Optional 可选值 一:简洁 方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用...

  • 3.Java8新特性 - 方法引用与构造器

    一.方法的引用 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的...

  • jdk8 方法引用

    方法引用 方法引用可看作一个“函数指针” function pointer 方法引用分为4类 1,类名::静态方法...

  • 方法引用

    1.什么是方法引用 方法引用是java8中特定情况下简化lambada表达式的一种语法糖,这里的特定情况是指当调用...

  • 方法引用

    方法引用(Method References) 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!...

  • 方法引用

    1.1 方法引用体验 方法引用出现的原因 在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案...

网友评论

      本文标题:Java8_方法引用

      本文链接:https://www.haomeiwen.com/subject/utsspxtx.html