1. 方法引用
若lambda体中的内容有方法已经实现了,我们可以使用‘方法引用’,
可以理解为方法引用是lambda表达式的另外一种表现形式。双冒号形式
主要有三种语法格式
使用要求(注意点):
- Lambda体中调用方法的参数列表、返回值类型,必须要和接口实现方法的参数列表、返回值保持一致
1.1. 对象::实例方法名
| 1 | //1.1. 对象::实例方法名 | 
1.2. 类::静态方法名
| 1 | 
 | 
1.3. 类::实例方法名
该类型使用条件:
- 第一个参数是实例方法的调用者,第二个参数是实例方法的参数
| 1 | //类::实例方法名 | 
2. 构造器引用
- 构造器,创建对象,自动匹配类中对应的构造器(参数不定)
- 需要调用的构造器的参数列表要和函数式接口中的抽象方法参数列表保持一致
语法:
ClassName::new;
实体类 Stu1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47public class Stu {
    private Integer id;
    private String name;
    private Integer age;
    public Stu() {
    }
    public Stu(Integer id) {
        this.id = id;
    }
    public Stu(Integer id, Integer age) {
        this.id = id;
        this.age = age;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    
    public String toString() {
        return "Stu{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
测试用例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public void test4(){
    //无参构造
    Supplier<Stu> stuSupplier = ()-> new Stu();
    System.out.println(stuSupplier.get());
    //自动匹配类中和接口实现的抽象方法中参数列表一致的构造器(无参构造器)
    Supplier<Stu> stuSupplier1 = Stu::new;
    System.out.println(stuSupplier1.get());
    //Stu{id=null, name='null', age=null}
    //有一个参数的构造
    Function<Integer,Stu> s1 = (x) -> new Stu(x);
    System.out.println(s1.apply(1)); //Stu{id=1, name='null', age=null}
    //自动匹配类中和接口实现的抽象方法中参数列表一致的构造器(单个Integer的构造器)
    Function<Integer,Stu> s2 = Stu::new;
    System.out.println(s2.apply(2)); //Stu{id=2, name='null', age=null}
    //有两个参数的构造  BiFunction<T, U, R>   R apply(T t, U u);
    BiFunction<Integer,Integer,Stu> bf = (x,y) -> new Stu(x,y);
    System.out.println(bf.apply(3,44)); //Stu{id=3, name='null', age=44}
    //自动匹配类中和接口实现的抽象方法中参数列表一致的构造器(两个个Integer的构造器)
    BiFunction<Integer,Integer,Stu> bf1 = Stu::new;
    System.out.println(bf1.apply(4,55));//Stu{id=4, name='null', age=55}
}
3. 数组引用
语法:
Type[]::new;
| 1 | //数组引用 Type[]::new |