java8(二)方法引用

前言

在Lambda表达式中主要有4种方法引用:

1.类::静态方法 (静态方法引用)

2.对象::方法 (特定对象的实例方法引用)

3.类::方法 (对象实例方法引用)

4.构造器方法引用

用来替代某些特定形式Lambda表达式。如果Lambda表达式的全部内容就是调用一个已有的方法,那么可以用方法引用来替代Lambda表达式。(当参数列表的值原原本本传递给方法体中的方法时,可以用方法引用的方式来书写)

 

使用

基础类准备

@Getter@Setter@ToString
public class Person implements Comparable<Person> {

    private String name;

    @Override
    public int compareTo(Person o) {
        return this.getName().compareTo(o.getName());
    }

    public int compare2(Person o1, Person o2) {
        return o1.getName().compareTo(o2.getName());
    }

}

用于演示构造器引用的类

public class PersonFactory {
    private Supplier<Person> supplier;

    public PersonFactory(Supplier<Person> supplier) {
        this.supplier = supplier;
    }

    public Person getPerson(){
        return supplier.get();
    }
}

测试

public class MethodRefTest {

    @Test
    public void test() {
        PersonFactory personFactory_old = new PersonFactory(() -> new Person());
        //构造器方法引用
        PersonFactory personFactory_new = new PersonFactory(Person::new);

        Person p1 = personFactory_new.getPerson();
        Person p2 = personFactory_new.getPerson();
        Person p3 = personFactory_new.getPerson();
        List<Person> list = new ArrayList<>();
        p1.setName("person1");
        list.add(p1);
        p2.setName("person2");
        list.add(p2);
        p3.setName("person3");
        list.add(p3);

        list.sort(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getName().compareTo(o2.getName());
            }
        });


        //1.类::静态方法 (静态方法引用)
        list.sort(MethodRefTest::staticCompare);
        //2.对象::方法  (特定对象的实例方法引用)
        list.sort(p1::compare2);

        //3.类::方法 (对象实例方法引用)
        list.sort(Person::compareTo);


    }

    public static int staticCompare(Person x, Person y) {
        return x.getName().compareTo(y.getName());
    }
}

总结

构造方法引用对应的函数式接口的里的抽象方法一定是: 返回一个对象,并且方法没有参数.符合这两个条件的接口jdk已经提供了,那就是Supplier接口。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值