45.方法引用

1.体验一下方法引用

public interface PrintInterface {
    void print(String s);
}
public class Demo {
    public static void main(String[] args) {
        show(s -> System.out.println(s));
//        方法引用符:"::"就会把上面方法里面的s传递给下面的println
        show(System.out::println);
//        可推导的就是可省略的
    }
    public static void show(PrintInterface printInterface){
        printInterface.print("体验一下方法引用");
    }
}

2.方法引用符

 3.Lamdba表达式支持的方法引用

引用类方法:

public interface Convertor {
    int convert(String s);
}
public class ConvertorDemo {
    public static void main(String[] args) {
//        1.Lamdba
        convert((String s)->{
            int i = Integer.parseInt(s);
            return i;
        });
//        2.Lamdba省略
        convert(s -> Integer.parseInt(s));
//        3.方法引用
        convert(Integer::parseInt);
//        Lambda表达式被类方法引用替代时,她的形式参数全部传递给静态方法作为参数
    }

    public static void convert(Convertor convertor) {
        int i = convertor.convert("888");
        System.out.println(i);
    }
}

引用对象的实例方法:

public interface PrinterINterface {
    void toUpCase(String s);
}
public class Print {
    public void toUpCase(String s){
        System.out.println(s.toUpperCase());
    }
}
public class PrintDemo {
    public static void main(String[] args) {
//        1.Lamdba表达式实现
        toUpCase((String s)->{
            System.out.println(s.toUpperCase());
        });
//        2. 1.Lamdba表达式简写
        toUpCase(s -> System.out.println(s.toUpperCase()));
//        3.引用对象的实例方法
        toUpCase(new Print()::toUpCase);
//        Lambda表达式被引用对象的实例方法替代时,她的形式参数全部传递给静态方法作为参数
    }

    public static void toUpCase(PrinterINterface printInterface) {
        printInterface.toUpCase("hourumiyue");
    }
}

引用类的实例方法:

public interface Sub {
    String sub(String s, int x, int Y);
}
public class SubDemo {
    public static void main(String[] args) {
        sub((s,x,y)->s.substring(x,y));
        sub(String::substring);
//        Lambda表达式被类的实例方法替代的时候
//        第一个参数作为调用者
//        后面的参数全部传递给该方法作为参数
    }

    public static void sub(Sub sub) {
        String hourumiyue = sub.sub("hourumiyue", 2, 6);
        System.out.println(hourumiyue);
    }
}

引用构造器:

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public interface StuBulider {
    Student stuBulid(String name,int age);
}
public class StuDemo {
    public static void main(String[] args) {
        stuBulide((name,age)->new Student(name,age));
        stuBulide(Student::new);
    }

    public static void stuBulide(StuBulider stuBulider) {
        Student student = stuBulider.stuBulid("云舒", 18);
        System.out.println(student.getName()+student.getAge());
    }
}

猜你喜欢

转载自www.cnblogs.com/luzhanshi/p/13200136.html