四个主要的函数式接口

目录

[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());
    }
}
相关推荐
晴空蓝天6 小时前
Spring Boot 3.5 脚手架里的 JWT + Redis 双轨会话,双端 token 隔离我是这么设计的
java·spring boot·redis
IT枫斗者枫哥6 小时前
MyBatis 列表查询优化:一页20条数据,21次SQL改成2次
java
君顾16 小时前
本地电竞服务交易系统架构设计与实战:从同城服务撮合到订单履约
java·开发语言·电竞
小刘在重生~6 小时前
十六(3)、《集合扩充》CopyOnWriteArrayList 超详细解析(线程安全集合)
java·笔记·面试·职场和发展
逆境不可逃6 小时前
Pi Agent 学习笔记:对话怎样保存、分支与恢复
java
huaweichenai7 小时前
spring boot使用hutool实现调用外部接口
java·spring boot
峥嵘life7 小时前
2026免费的 opencode 使用分享:Windows端 + 服务器CLI 实战总结
android·大数据·开发语言
纪念 2297 小时前
C++类和对象(二)
开发语言·c++
泡海椒7 小时前
Java 后端最优 PDF 导出方案:jquick-pdf 项目引入与快速测试
java·开发语言·pdf
Evand J7 小时前
【MATLAB例程】二维Astar路径规划与AOA-TDOA定位仿真。完整代码,附下载链接。包运行成功,带中文注释
开发语言·matlab·路径规划·代码·定位·融合定位