四个主要的函数式接口

目录

[1. 官方定义](#1. 官方定义)

[2. 核心特征](#2. 核心特征)

3.代码测试

函数式接口

断言型接口

供给型接口和消费性接口


1. 官方定义

函数式接口(Functional Interface)有且只有一个抽象方法 的接口,就叫函数式接口。

它是为了 支持 Lambda 表达式 而设计的。


2. 核心特征

  1. 接口里只能有 1 个抽象方法
  2. 可以有:
    • 默认方法
    • 静态方法
    • 重写 Object 的方法(如 equalstoString)这些不算抽象方法数量
  3. 可以使用注解 @FunctionalInterface 显式标记
    • 加了:编译器强制检查是不是只有一个抽象方法
    • 不加:只要满足条件,依然是函数式接口
接口名称 接口类型 方法 作用
Consumer 消费型接口 void accept(T t) 有入参,无返回值 → 只管 "消费" 数据
Supplier 供给型接口 T get() 无入参,有返回值 → 只管 "生产" 数据
Function<T,R> 函数型接口 R apply(T t) 有入参,有返回值 → 类型转换 / 处理
Predicate 断言型接口 boolean test(T t) 有入参,返回布尔 → 判断 / 条件

例如Runnable接口:

java 复制代码
@FunctionalInterface
public interface Runnable {

    public abstract void run();
}

java.util.function包下面的四个主要的函数式接口:

Function,Predicate,Supplier,Consumer

3.代码测试

函数式接口

java 复制代码
package com.qcby.function;
import java.util.function.Function;

public class Demo1 {

    public static void main(String[] args) {
//        Function<String, String> function = new Function<String ,String>() {
//            @Override
//            public String apply(String o) {
//                return o;
//            }
//        };

        //lambda写法
        Function<String, String> function = (String s) -> s;
        System.out.println(function.apply("Hello World!"));
    }
}

断言型接口

java 复制代码
package com.qcby.function;

import java.util.function.Predicate;

public class Demo2 {

    public static void main(String[] args) {
        //判断 传入的参数 是否大于 0
//        Predicate<Integer> predicate = new Predicate<Integer>() {
//            @Override
//            public boolean test(Integer o) {
//                return o >= 0;
//            }
//        };
        //lambda写法
        Predicate<Integer> predicate = (o) -> o >= 0;
        System.out.println(predicate.test(-10));
    }

}

供给型接口和消费性接口

java 复制代码
package com.qcby.function;

import java.util.function.Consumer;
import java.util.function.Supplier;

public class Demo3 {

    public static void main(String[] args) {
        Supplier<Integer> supplier = () -> { return 1024; };
        Consumer<Integer> consumer = (i) -> {System.out.println(i); return;};
        consumer.accept(supplier.get());
    }
}
相关推荐
咸鱼翻身小阿橙几秒前
文件读写 + Qt Model/View + 自定义分页+搜索过滤
java·数据库·qt
在繁华处3 分钟前
Java从零到熟练(十):JVM基础与性能优化
java·jvm·性能优化
眠りたいです4 分钟前
现代C++:C++17中的新语言特性
开发语言·c++·c++17
一只旭宝6 分钟前
【C++入门精讲17】序列容器
开发语言·c++
Demon1_Coder6 分钟前
Day1-SpringAI-1.0.0版本
java·开发语言·前端
老码观察11 分钟前
设计模式实战解读(九):责任链模式——流水线上层层把关的艺术
java·设计模式·责任链模式
郝学胜-神的一滴13 分钟前
Qt 高级开发 021:零基础吃透 QVBoxLayout 垂直布局
开发语言·c++·qt·程序人生·用户界面
basketball61615 分钟前
C++进阶:2. std::move 和 std::forward 函数
java·开发语言·c++
_oP_i16 分钟前
105、word 出现 {TOCO“1-2“HZ}
开发语言·c#·word
yong999018 分钟前
基于MATLAB的雷达数字信号处理
开发语言·matlab·信号处理