- 方法引用总结
1.什么是方法引用?
把已经存在的方法拿过来用,当做函数式接口中抽象方法的方法体
2.::是什么符号?
方法引用符
3.方法引用时要注意什么?
●需要有函数式接口
●被引用方法必须已经存在
●被引用方法的形参和返回值需要跟抽象方法保持一致
●被引用方法的功能要满足当前的需求
引用方法说明
1.引用静态方法
类名::静态方法
2.引用成员方法
对象::成员方法(引用任一个类对象的方法)
this::成员方法(只能由成员方法引用)
super::成员方法(只能由成员方法引用)
3.引用构造方法
类名::new
4.使用类名引用成员方法
类名::成员方法
不能引用所有类中的成员方法
如果抽象方法的第一个参数是A类型的只能引用A类中的方法
5.引用数组的构造方法
数据类型[]::new
- 练习
练习1:集合中存储一些字符串的数据,比如:张三,23。收集到Student类型的数组当中(使用方法引用完成)
java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class FInvokeDemo7 {
public static void main(String[] args) {
// 创建集合并添加
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "姓名1,18", "姓名2,28", "姓名3,36", "姓名4,41");
// 转换为Studeng对象并添加到数组中
// Student类中有一个参数类型String的构造方法
Student[] arr = list.stream().map(Student::new).toArray(Student[]::new);
System.out.println(Arrays.toString(arr));
}
}
练习2:创建集合添加学生对象,学生对象属性:name,age只获取姓名并放到数组当中(使用方法引用完成)
java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Stream;
public class FInvokeDemo8 {
public static void main(String[] args) {
// 创建集合并添加
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "姓名1,18", "姓名2,28", "姓名3,36", "姓名4,41");
// 转换为Studeng对象并添加到数组中
// Student类中有一个参数类型String的构造方法
Student[] arr = list.stream().map(Student::new).toArray(Student[]::new);
// 使用上一步创建的学生对象数组,获取姓名,并转为String数组
String[] nameArr = Stream.of(arr).map(Student::getName).toArray(String[]::new);
System.out.println(Arrays.toString(nameArr));
}
}
练习3:创建集合添加学生对象,学生对象属性:name,age
把姓名和年龄拼接成:张三-23的字符串,并放到数组当中(使用方法引用完成)