函数式接口介绍

函数式接口

  • 只有一个抽象方法的接口
  • jdk的函数式接口都加上了@Functionallnterface注解进行标识。但是无论是否加上该注解只要接口中只有一个抽象方法,都是函数式接口

常见的函数式接口

  • Consumer 消费接口(ForEach方法)

    根据其中抽象方法的参数列表和返回值类型知道,我们可以在方法中传入的参数进行消费

  • Function 计算转换接口(map方法)

    根据其中抽象方法的参数列表和返回值类型知道,我们可以在方法中对传入的参数计算和转换,把结果返回

  • Predicate 判断接口(filter方法)

    根据其中抽象方法的参数列表和返回值类型知道,我们可以在方法中对传入的参数条件判断,返回判断结果

  • Supplier 生产型接口

    根据其中抽象方法的参数列表和返回值类型知道,我们可以在方法中创建对象,把创建号的对象返回

常见的默认方法

  • and

    我们在使用Predicate接口时可能需要进行判断条件的拼接,而and方法相当于是使用&&来拼接两个判断条件

    List<Author> authors = getAuthors();
    authors.stream().filter(((Predicate<Author>) author -> author.getAge() > 18)
            .and(author -> author.getName().length()>2)).
            forEach(author -> System.out.println(author.getName()));
    
  • or

    与and方法相反

  • negate

    Predicate接口中的方法。negate方法相当于是在判断添加前面加了个!表示取反

方法引用

如果方法体中只有一个方法的调用的话(包括构造方法),我们可以用方法引用进一步简化代码

基本格式

类名或者对象名::方法名

语法详解

  • 引用类的静态方法

    • 格式

      类名::方法名

    • 前提

      如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的静态方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个静态方法中,这个时候我们就可以引用类的静态方法。

  • 引用对象的实例方法

    • 格式

      对象名::方法名

    • 前提

      如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个对象的成员方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个成员方法中,这个时候我们就可以引用对象的实例方法

  • 引用类的实例方法

    • 格式

      类名::方法名

    • 前提

      如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了第一个参数的成员方法,并且我们把要重写的抽象方法中剩余的所有的参数都按照顺序传入了这个成员方法中,这个时候我们就可以引用类的实例方法。

  • 构造器引用

    • 格式

      类名::new

    • 前提

      如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的构造方法,并且我们把要重写的抽象方法中的所有的参数都按照顺序传入了这个构造方法中,这个时候我们就可以引用构造器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值