Java8之方法引用

一、什么是方法引用

在Lambda表达式中,将其划分了几块。这一行就是lambda表达式。() -> System.out.println(“使用Lambda表达式”);下面我们对lambda的格式进行一个介绍:

(1)左边括号:lambda的形参列表,就好比是我们定义一个接口,里面有一个抽象方法,这个抽象方法的形参列表。

(2)箭头:lambda的操作符,所以你看见这个箭头心中知道这是一个lambda表达式就可以了。

(3)右边lambda体:就好比是我们实现了接口中的抽象方法。

在最后一块中,有时候,lambda体可能仅仅调用一个已存在的方法,而不做任何其它事,对于这种情况,通过一个方法名字来引用这个已存在的方法会更加清晰。

所以我们来总结:方法引用是一个更加紧凑,易读的 Lambda 表达式,注意方法引用是一个 Lambda 表达式,其中方法引用的操作符是双冒号 “::”。
如果一个lambda表达式只有一个调用,那么它可以被方法引用所代替。

2、方法引用的几种形式

(1)对象引用::实例方法名

(2)类名::静态方法名

(3)类名::实例方法名

(4)类名::new

上代码

import lombok.Data;
import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;

@Data
public class Person {
    private String name;

    private Person(String name){
        this.name = name;
    }
    public Person(){

    }

    //类名::静态方法名
    public static int compareName1(Person person1, Person person2){
        return person1.getName().compareToIgnoreCase(person2.getName());
    }
    //对象引用::实例方法名
    public  int compareName2(Person person1, Person person2){
        return person1.getName().compareToIgnoreCase(person2.getName());
    }
    //类名::实例方法名
    public  int compareName3(Person person1){
        return this.getName().compareToIgnoreCase(person1.getName());
    }

    //类名::new
    public String  getString(Supplier<String> supplier){
       return supplier.get()+"test";
    }

    @Test
    public void test(){
        Person person1 = new Person("lisi");
        Person person2 = new Person("zhansan");
        Person person3 = new Person("wangwu");
        List<Person> list = Arrays.asList(person1,person2,person3);
        list.sort(Person::compareName1);
        list.forEach(it->System.out.println(it.getName()));

        Person person = new Person();
        list.sort(person::compareName2);
        list.forEach(it->System.out.println(it.getName()));

        list.sort(Person::compareName3);
        list.forEach(it->System.out.println(it.getName()));
        System.out.println(person.getString(String::new));

    }
}

参考资料 java8的新特性-方法引用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鹏小站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值