方法引用

方法引用的作用:把已经存在的方法拿过来用,当作函数式接口中的抽象方法的方法体

使用方法引用应该满足的条件:

  • 需要有函数式接口
  • 被引用方法必须已经存在
  • 被引用方法的形参和返回值需要跟抽象方法保持一致
  • 被引用方法的功能要满足当前的需求

引用静态方法

格式:类名::静态方法

范例: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()
//静态方法中是没有this和super的,所以只能创建该类的对象
.filter(new Main()::stringJudge)
.forEach(s -> System.out.print(s + " "));
//输出:ab ac
}

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