四个主要的函数式接口

目录

[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());
    }
}
相关推荐
不吃香菜学java16 小时前
Redis的java客户端
java·开发语言·spring boot·redis·缓存
captain37616 小时前
事务___
java·数据库·mysql
北漂Zachary16 小时前
四大编程语言终极对比
android·java·php·laravel
小江的记录本16 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
贵沫末16 小时前
python——打包自己的库并安装
开发语言·windows·python
文祐17 小时前
C++类之虚函数表及其内存布局(一个子类继承一个父类)
开发语言·c++
zuowei288917 小时前
华为网络设备配置文件备份与恢复(上传、下载、导出,导入)
开发语言·华为·php
xiaohe0717 小时前
超详细 Python 爬虫指南
开发语言·爬虫·python
嗑嗑嗑瓜子的猫18 小时前
Java!它值得!
java·开发语言
xiaoshuaishuai818 小时前
C# GPU算力与管理
开发语言·windows·c#