方法引用
方法引用的作用:把已经存在的方法拿过来用,当作函数式接口中的抽象方法的方法体
使用方法引用应该满足的条件:
- 需要有函数式接口
- 被引用方法必须已经存在
- 被引用方法的形参和返回值需要跟抽象方法保持一致
- 被引用方法的功能要满足当前的需求
引用静态方法
格式:类名::静态方法
范例:Integer::parseInt
1 2 3 4
| ArrayList<String> list = new ArrayList<> (); list.stream() .map(Integer::parseInt) .forEach(s -> System.out.println(s));
|
引用成员方法
格式:对象::成员方法
- 其他类:其他类::方法名
- 本类:this::方法名
- 父类:super::方法名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class Main { public static void main(String[] args) { ArrayList<String> list = new ArrayList<> (); Collections.addAll(list,"ab","abc","ac","bc"); list.stream() .filter(new Main()::stringJudge) .forEach(s -> System.out.print(s + " ")); } public boolean stringJudge(String s) { return s.startsWith("a") && s.length() == 2; } }
|
引用构造方法
格式:类名::new
范例:Student::new
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class Student { private String name; private String age; public Student() {} public Student(String str) { this.name = str.split(",")[0]; this.age = Integer.parseInt(str.split(",")[1]); } }
public class Main { public static void main(String[] args) { ArrayList<String> list = new ArrayList<> (); list.add("zhangsan,23"); List<Student> newList = list.stream() .map(Student::new) .collect(Collectors.toList()); } }
|