四个主要的函数式接口

目录

[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());
    }
}
相关推荐
咖啡八杯4 小时前
GoF设计模式——策略模式
java·后端·spring·设计模式
用户1285261160211 小时前
我把祖传Java项目重构后,接口响应从3s砍到了200ms,只改了这几行代码
java
Linsk11 小时前
组件 = 模板 + 业务逻辑
java·前端·vue.js
星沉远浦12 小时前
用Gemini高效解决Java代码报错难以定位的问题
java
用户2986985301416 小时前
Word 文档字符级格式化:Java 实现方案详解
java·后端
笨鸟飞不快16 小时前
从单个服务到集群:一次完整的性能排查复盘
java·前端
荣码16 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
SamDeepThinking17 小时前
Java微服务练习方式
java·后端·微服务
朦胧之1 天前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅1 天前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java