Java四种常用函数式接口详解:Consumer、Function、Predicate与Supplier

向北走
向北走
发布时间:2026-10-16| 7人浏览过
原创

Java 中的函数式接口是 Lambda 表达式的核心载体。本文重点介绍 Java 提供的四种最常用函数式接口:Consumer(消费型)、Function(转换型)、Predicate(断言型)和 Supplier(供给型),并通过代码解析其参数、返回值及应用场景。

什么是函数式接口

函数式接口(Functional Interface)是指只有一个抽象方法的接口,它是 Lambda 表达式和方法引用的类型基础。在代码中使用 @FunctionalInterface 注解修饰的类,编译器会严格检查该类是否仅包含一个抽象方法。如果存在多个或没有抽象方法,编译器将报错。需要注意的是,函数式接口允许包含多个默认方法(default methods)和静态方法。

核心特征:

  • 单一抽象方法: 确保接口有且仅有一个未实现的抽象方法,这是 Java 编译器能够将 Lambda 表达式推断为该接口类型的唯一依据。
  • Lambda 适用性: 适用于函数式编程场景,使得代码更加简洁和声明式。

Java 提供的四种核心函数式接口

Java 8 在 java.util.function 包中提供了大量内置函数式接口,其中最基础的四种类型涵盖了常见的数据处理需求:输入无返回、输入有返回、布尔判断和数据供给。

第1步:Consumer — 消费型接口

目的: 接收一个输入参数进行处理(如打印、存储等),但不返回任何结果。

接口定义: void accept(T t)

示例逻辑: 接受一个字符串并将其打印到控制台。

package day06.java8;
import java.util.function.Consumer;

public class Demo04 {
    public static void main(String[] args) {
        // Consumer<t> 消费型:只接收输入,不返回结果
        Consumer<String> consumer = str-> System.out.println(str);
        consumer.accept("Hello Java");
    }
}

第2步:Function<T, R> — 转换型接口

目的: 接收一个类型为 T 的参数,并返回一个类型为 R 的结果,常用于数据转换。

接口定义: R apply(T t)

示例逻辑: 将一个字符串转换为它的长度(Integer)。

import java.util.function.Function;

public class Demo04 {
    public static void main(String[] args) {
        // Function<T,R> 转换类型:传入一个T类型,传出一个R类型
        Function<String, Integer> function = str -> str.length();
        Integer length = function.apply("abc");
        System.out.println(length); // 输出 3
    }
}

第3步:Predicate<T> — 断言型接口

目的: 接收一个输入参数,返回一个布尔值(true 或 false),常用于条件判断和过滤。

接口定义: boolean test(T t)

示例逻辑: 判断字符串的长度是否大于 3。

import java.util.function.Predicate;

public class Demo04 {
    public static void main(String[] args) {
        // Predicate<T> 断言型:传入一个T类,返回断言true false
        Predicate<String> predicate = str -> str.length() > 3;
        boolean result = predicate.test("abcd");
        System.out.println(result); // 输出 true
    }
}

第4步:Supplier<T> — 供给型接口

目的: 不提供任何输入参数,而是“供给”或生成一个指定类型的对象,常用于数据生成。

接口定义: T get()

示例逻辑: 使用 Apache Commons Lang 库随机生成一个长度为 8 的字母数字字符串。

import org.apache.commons.lang3.RandomStringUtils;
import java.util.function.Supplier;

public class Demo04 {
    public static void main(String[] args) {
        // Supplier<T>:什么都不传,给返回一个对象
        Supplier<String> supplier = ()-> RandomStringUtils.randomAlphanumeric(8);
        String s = supplier.get();
        System.out.println(s); // 例如输出:aB3xK9mP
    }
}

综合应用示例

以下代码整合了上述四种接口,展示了它们在同一个程序结构中的典型用法:

package day06.java8;
/*
java提供四种类型的函数式接口
Function<T,R>, 转换类型,传入一个T类型,传出一个R类型
Consumer<T> 消费型
Supplier<T>,什么都不传,给返回一个对象
Predicate<T> 断言型,传入一个T类,返回断言true false
*/

import org.apache.commons.lang3.RandomStringUtils;

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

public class Demo04 {
    public static void main(String[] args) {
        // 1. Function: 转换类型
        Function<String,Integer> function =str -> str.length();
        Integer abc = function.apply("abc");
        System.out.println(abc);

        // 2. Consumer: 消费型
        Consumer<String> consumer =str-> System.out.println(str);
        consumer.accept("abc");

        // 3. Supplier: 供给型
        // 这里随机返回一个长度为8的字符串
        Supplier<String> supplier = ()-> RandomStringUtils.randomAlphanumeric(8);
        String s = supplier.get();
        System.out.println(s);

        // 4. Predicate: 断言型
        Predicate<String> predicate =str->str.length()>3;
        boolean test = predicate.test("abcd");
        System.out.println(test);
    }
}

以上就是关于Java提供的4种核心函数式接口的详细内容,更多关于Java函数式接口与Lambda表达式应用的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。