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

JAVA入门学习 — Lambda表达式方法引用,第1张

文章目录
  • 简介
  • 实例
    • 静态方法引用 (类名::方法名)
    • 实例方法引用 (实例名::方法名)
    • 无参构造方法引用 (类名::new)
    • 有参构造方法引用 (类名::new)
    • 特殊实例方法引用 (Person::compareTo)
    • 数组引用 (数组数据类型::new)


简介

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/741979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存