java 里 Consumer 和 Supplier 用法

Consumer 和 Supplier 是两个非常常用的接口,主要用于传递行为参数

1. Consumer<T>

源码定义:

java 复制代码
@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

简单用法示例:

java 复制代码
import java.util.function.Consumer;

public class ConsumerDemo {
    public static void main(String[] args) {
        Consumer<String> printer = s -> System.out.println(s);
        printer.accept("Hello, Consumer!"); // 输出 Hello, Consumer!
        
        // 或者用于集合
        List<String> names = Arrays.asList("Alice", "Bob", "Cathy");
        names.forEach(printer); // 遍历并打印
    }
}

输出:

复制代码
Hello, Consumer!
Alice
Bob
Cathy

2. Supplier<T>

源码定义:

java 复制代码
@FunctionalInterface
public interface Supplier<T> {
    T get();
}

简单用法示例:

java 复制代码
import java.util.function.Supplier;

public class SupplierDemo {
    public static void main(String[] args) {
        Supplier<Double> randomSupplier = () -> Math.random();
        System.out.println(randomSupplier.get()); // 每次调用输出不同的随机数

        // 示例:生成指定对象
        Supplier<String> stringSupplier = () -> "Hello, Supplier!";
        System.out.println(stringSupplier.get());
    }
}

输出:

复制代码
0.8737515411240557
Hello, Supplier!

3. 更高级用法

组合 Consumer:

java 复制代码
Consumer<String> c1 = s -> System.out.println("Hello, " + s);
Consumer<String> c2 = s -> System.out.println(s.toUpperCase());
c1.andThen(c2).accept("java"); // 顺序执行c1和c2

结合 Supplier 和 Consumer:

java 复制代码
public void useSupplierAndConsumer(Supplier<String> supplier, Consumer<String> consumer) {
    String data = supplier.get();
    consumer.accept(data);
}

输出

复制代码
Hello, java
JAVA

用法:

java 复制代码
useSupplierAndConsumer(
    () -> "Java",
    s -> System.out.println("结果是:" + s)
);

输出:

复制代码
结果是:Java
相关推荐
天天被压力1 小时前
【A股分钟级高频数据完全手册 #11】券商实时行情数据接口:实时交易(券商源)接入与字段
java·人工智能·python
天天被压力1 小时前
【A股分钟级高频数据完全手册 #12】股票五档盘口数据接口:买卖五档实时盘口解析
java·人工智能·python
Wang's Blog10 小时前
Java 项目实战: 交友项目 - FastDFS:入门案例
java·开发语言·交友
apcipot_rain11 小时前
C++转Java日记(03)
java·开发语言·c++
皮皮林55111 小时前
Java实现微信扫码登录
java
Yyyyyy~14 小时前
【Java】Day4Web基础知识
java·spring boot
灿飞屋15 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
NE_STOP15 小时前
Spring AI Alibaba - MCP入门
java
nice_lcj52015 小时前
【从零理解 Spring AI · 07】对话记忆:让模型记住上一句说了什么
java·spring ai·ai应用开发·chatmemory·对话记忆
SL_staff16 小时前
制造业交付崩盘?用跨部门节点协同计划打通销售、生产与质量链路
java·开源·产品