02:常见的函数式接口

【java8新特性】02:常见的函数式接口

Jdk8提供的函数式接口都在java.util.function包下,Jdk8的函数式类型的接口都有@FunctionInterface注解所标注,但实际上即使没有该注解标注的有且只有一个抽象方法的接口,都可以算是函数式接口。
在JDK8中内置的四大核心函数式接口如下:

函数式接口 接口类型 参数类型 返回类型 作用 Stream流中的应用场景
Consumer<T> 消费型接口 T void 对类型为T的对象进行操作,包含方法为accpet(T t) 如forEach、peek等方法的函数式接口都是Consumer类型
Supplier<T> 供给型接口 T 返回类型为T的对象,包含方法为T get() 如collect等方法的某些方法重载就是用的Supplier类型
Function<T,R> 函数型接口 T R 对类型为T的对象进行操作,返回结果为 R类型的对象,包含方法为R apply(T t) 如map,flatMap等方法的函数式接口都是Function类型
Predicate<T> 断言型接口 T boolean 确定类型为T的对象是否满足约束,并返回约束结果,包含方法为boolean test(T t) 如filter等方法的函数式接口都是Predicate类型

Consumer<T>

Consumer<T>消费型接口,顾名思义就是消费并处理参数,且不反馈调用环境

基本使用

public class Main {
    /**
     * Consumer<T>
     *     消费型接口:顾名思义主要用于消费参数,不反馈调用环境(没有返回值)
     *     accept: 抽象方法实现,用于调用方法。
     *     andThen: 默认实现方法,内部允许我们链式调用
     */
    public static void main(String[] args) {
        // 给定字符串转为大写并输出到控制台,匿名内部类的方式实现
        Consumer<String> con1 = new Consumer<String>() {
            @Override
            public void accept(String str) {
                System.out.println("通过匿名内部类的方式:"+ str.toUpperCase());
            }
        };
        // 执行该方法的时候,我们传入了给定参数字符串,它会去执行我们上述实现的accept方法并传入参数,最后执行我们给定的代码逻辑
        con1.accept("abc");
        // 给定字符串转为大写并输出到控制台,通过Lambda表达式实现
        Consumer<String> con2 = (text)-> System.out.println("通过Lambda表达式的方式:"+ text.toUpperCase());
        con2.accept("goods");
        /**
         * 最终结果:
         * 通过匿名内部类的方式:ABC
         * 通过Lambda表达式的方式:GOOD
         * 使用lambda表达式,我们只需要记住参数列表和执行逻辑即可,其他的我们无需关注。
         */
    }}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 02:常见的函数式接口