JAVA入门学习 — Lambda表达式方法引用

本文介绍了Java 8中的Lambda表达式,它使得代码更加简洁。通过实例详细阐述了静态方法引用、实例方法引用、无参及有参构造方法引用,以及特殊实例方法引用和数组引用的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


简介

        Lambda表达式是Java 8中添加的一个新特性,可以认为,Lambda是一个匿名函数(相似于匿名内部类),作用是返回一个实现了接口的对象(这个观点非常重要,贯穿于Lambda表达式的整个使用过程)。使用Lambda表达式对比于其他接口实现方式显得非常简洁。

实例

创建一个Person类:

public class Person implements Comparable {
    private String nickname;
    private int gender;

    public Person() {
    }

    public Person(String nickname, int gender) {
        this.nickname = nickname;
        this.gender = gender;
    }


    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public static int staticSum(int a, int b) {
        return a + b;
    }

    public int sum(int a, int b) {
        return a + b;
    }

    @Override
    public String toString() {
        return "Person{" +
                "nickname='" + nickname + '\'' +
                ", gender=" + gender +
                '}';
    }

    @Override
    public int compareTo(Object o) {
        Person person = (Person) o;
        int x = this.gender - person.getGender();
        int y = this.nickname.hashCode() - person.getNickname().hashCode();
        if (x != 0) {
            return x;
        } else if (y != 0) {
            return y;
        } else {
            return 0;
        }
    }
}

静态方法引用 (类名::方法名)

@Test
    public void test(){
        BiFunction<Integer, Integer, Integer> sum = Person::staticSum;
        Integer apply = sum.apply(10, 20);
        System.out.println(apply);
    }

在这里插入图片描述

实例方法引用 (实例名::方法名)

@Test
    public void test01(){
        Person person = new Person();
        BiFunction<Integer, Integer, Integer> sum = person::sum;
        Integer apply = sum.apply(20, 20);
        System.out.println(apply);
    }

在这里插入图片描述

无参构造方法引用 (类名::new)

@Test
    public void test03() {
        Supplier<Person> supplier = Person::new;
        Person person = supplier.get();
        System.out.println(person);
    }

在这里插入图片描述

有参构造方法引用 (类名::new)

@Test
    public void test04() {
        Supplier<Person> supplier = Person::new;
        Person person = supplier.get();
        person.setNickname("路飞");
        person.setGender(1);
        System.out.println(person);
    }

在这里插入图片描述

特殊实例方法引用 (Person::compareTo)

 @Test
    public void test05(){
        BiFunction<Person, Person, Integer> person = Person::compareTo;
        Person person1 = new Person("路飞",1);
        Person person2 = new Person("路飞",1);
        Person person3 = new Person("娜美",0);
        Integer apply = person.apply(person1,person2);
        if(apply != 0){
            System.out.println("person01和person02不是同一个对象");
        }else{
            System.out.println("person01和person02是同一个对象");
        }
        Integer apply1 = person.apply(person1,person3);
        if(apply1 != 0){
            System.out.println("person01和person03不是同一个对象");
        }else{
            System.out.println("person01和person03是同一个对象");
        }
    }

在这里插入图片描述
或者使用下列写法:

@Test
    public void test06() {
        ToIntBiFunction<Person, Person> function = Person::compareTo;
        Person person1 = new Person("路飞", 1);
        Person person2 = new Person("路飞", 1);
        int i = function.applyAsInt(person1, person2);
        if (i != 0) {
            System.out.println("不是同一个对象");
        } else {
            System.out.println("是同一个对象");
        }
    }

数组引用 (数组数据类型::new)

@Test
    public void test07(){
        Function<Integer,String[]> function = String[]::new;
        String[] apply = function.apply(5);
        System.out.println("该数组长度>>>" + apply.length);
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chenlei...

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

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

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

打赏作者

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

抵扣说明:

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

余额充值