简单了解方法引用

目录

1 简述说明

2 静态方法的引用

3 静态方法引用示例代码

4 实例方法的引用

5 实例方法引用的示例代码

6 特定类型的方法引用

7 特定类型的方法引用示例代码

8 构造器引用

9 构造器引用的示例代码


1 简述说明

作用:进一步简化Lambda表达式的

方法引用的标志性符合“::”

2 静态方法的引用

如果某个Lambda表达式里只是调用一个静态方法,并且前后参数的形式一致,就可以使用静态方法引用。

3 静态方法引用示例代码

一、创建学生类Student类



public class Student {
    private String name;
    private double height;
    private int age;
    public Student() {
    }

    public Student(String name, double height, int age) {
        this.name = name;
        this.height = height;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return height
     */
    public double getHeight() {
        return height;
    }

    /**
     * 设置
     * @param height
     */
    public void setHeight(double height) {
        this.height = height;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", height = " + height + ", age = " + age + "}";
    }
}

二、创建测试类


import java.util.Arrays;
import java.util.Comparator;

public class Test1 {
    public static void main(String[] args) {
        Student[] students = new Student[4];
        students[0] = new Student("蜘蛛精", 177.3, 22);
        students[1] = new Student("紫霞", 167.3, 27);
        students[2] = new Student("紫霞", 163.3, 23);
        students[3] = new Student("至尊宝", 178.9, 25);

        // 原始写法:对数组中的学生对象,按照年龄升序排序
        Arrays.sort(students, new Comparator<Student>() {
                    @Override
                    public int compare(Student o1, Student o2) {
                        return o1.getAge() - o2.getAge();//按照年龄升序排序
                    }
                });
        //使用Lambda简化后的形式
        //Arrays.sort(students,(o1,o2) ->  o1.getAge() - o2.getAge());

        //Arrays.sort(students,(o1,o2) -> CompareByDate.compareByAge(o1,o2))

        //静态方法引用
        Arrays.sort(students,CompareByDate::compareByAge);

        System.out.println(Arrays.toString(students));
    }
}

三、创建CompareByDate类



public class CompareByDate {
    public static int compareByAge(Student o1 ,Student o2){
        return o1.getAge() - o2.getAge();// 升序排序的规则
    }
}

4 实例方法的引用

格式

对象名::实例方法

使用场景:如果某个Lambda表达式只是调用一个实例方法,并且前后参数的形式一致,就可以使用实例方法引用。

5 实例方法引用的示例代码

public class CompareByDate {
 /*   public static int compareByAge(Student o1 ,Student o2){
        return o1.getAge() - o2.getAge();// 升序排序的规则
    }*/
    public int compareByAgeDesc(Student o1 ,Student o2){
        return o2.getAge() - o1.getAge();// 降序排序的规则
    }
}
public class Test1 {
    public static void main(String[] args) {
        Student[] students = new Student[4];
        students[0] = new Student("蜘蛛精", 177.3, 22);
        students[1] = new Student("紫霞", 167.3, 27);
        students[2] = new Student("紫霞", 163.3, 23);
        students[3] = new Student("至尊宝", 178.9, 25);

        // 原始写法:对数组中的学生对象,按照年龄升序排序
/*        Arrays.sort(students, new Comparator<Student>() {
                    @Override
                    public int compare(Student o1, Student o2) {
                        return o1.getAge() - o2.getAge();//按照年龄升序排序
                    }
                });
        //使用Lambda简化后的形式
        //Arrays.sort(students,(o1,o2) ->  o1.getAge() - o2.getAge());

        //Arrays.sort(students,(o1,o2) -> CompareByDate.compareByAge(o1,o2))

        //静态方法引用
        Arrays.sort(students,CompareByDate::compareByAge);

        Arrays.sort(students,(o1,o2) -> o2.getAge() - o1.getAge());//降序*/
        CompareByDate compare = new CompareByDate();
        //Arrays.sort(students,(o1,o2) -> compare.compareByAgeDesc(o1,o2));//降序
        Arrays.sort(students,(o1,o2) -> compare.compareByAgeDesc(o1,o2));//降序
        //实例方法引用
        Arrays.sort(students,compare::compareByAgeDesc);

        System.out.println(Arrays.toString(students));
    }

6 特定类型的方法引用

格式

类型::方法

使用场景:如果某个Lambda表达式里只是调用一个实例方法,并且前面参数列表中的第一个参数是作为方法的主调后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用。

7 特定类型的方法引用示例代码


import java.util.Arrays;
import java.util.Comparator;

/*掌握特定类型的方法引用*/
public class Test2 {
    public static void main(String[] args) {
        String [] names = {"Tom", "Jerry", "Mike","boby","angela","Andy",
        "dlei","caocao","Babo","jack","Cici"};

        //对数组进行排序(默认是按照字符串的首字符编号进行升序排序的)
        //Arrays.sort(names);

        //忽略首字符大小写进行排序
      /*  Arrays.sort(names, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // 制定比较规则。 o1 ="Andy" o2 ="angela"
                return o1.compareToIgnoreCase(o2);
            }
        });*/
        //Arrays.sort(names,( o1, o2) -> o1.compareToIgnoreCase(o2));
        //特定类型的方法应用
        Arrays.sort(names,String::compareToIgnoreCase);
        System.out.println(Arrays.toString(names));
    }
}

8 构造器引用

格式

类名::new

使用场景

如果某个Lambda表达式里只是在创建对象,并且后参数情况一致,就可以使用构造器引用。

9 构造器引用的示例代码

一、创建Car类



public class Car {
    private String name;
    private double price;

    public Car() {
    }

    public Car(String name, double price) {
        this.name = name;
        this.price = price;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return price
     */
    public double getPrice() {
        return price;
    }

    /**
     * 设置
     * @param price
     */
    public void setPrice(double price) {
        this.price = price;
    }

    public String toString() {
        return "Car{name = " + name + ", price = " + price + "}";
    }
}

二、创建测试类



/*目标:构造器引用(理解语法)*/
public class Test3 {
    public static void main(String[] args) {
        //1、创建这个接口的匿名内部类对象
 /*       CreateCar cc = new CreateCar() {
            @Override
            public Car create(String name, double price) {
                return new Car(name, price);
            }
        };*/
       /* CreateCar cc = (name, price) -> new Car(name, price);*/
        //构造器引用
        CreateCar cc = Car::new;

        Car c = cc.create("BMW", 400000);
        System.out.println(c);
    }
}

interface CreateCar {
    Car create(String name, double price);
}

以上就是方法引用的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值