四个主要的函数式接口

目录

[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());
    }
}
相关推荐
雨辰AI43 分钟前
人大金仓 K8s 密评合规加固|国密全链路加密 + 权限收敛容器化落地(三级密评直通版)
java·云原生·容器·kubernetes·政务
郑州光合科技余经理6 小时前
代驾系统架构拆解:订单链路、权限组织与私有化源码交付
开发语言·后端·算法·架构·系统架构·uni-app·php
码哥DFS9 小时前
二叉树的直径
开发语言·javascript·算法
paopaokaka_luck10 小时前
基于springboot3+vue3的企业考勤管理系统(部门树递归、Echarts图形化分析)
开发语言·spring boot·学习·echarts·mybatis·需求分析·代码规范
Pluchon10 小时前
Java个人综合项目——萌部落社区V2.0
java·python·spring·spring cloud·postman·idea
梦雨生生11 小时前
java开发工具(学习第一天)
java·开发语言·学习
她说可以呀12 小时前
Spring-ai-alibaba文生图
java·人工智能·spring
啊啊啊啊啊!!!!13 小时前
【c++】stack和queue的接口使用以及底层实现
开发语言·c++
松仔log13 小时前
Java中级——组合和继承
android·java·开发语言
不才不才不不才13 小时前
Spring 源码系列(16): doDispatch 全流程——一次请求的主干链路
java·后端·spring