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());
}
}