You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何依次执行数量未知的List<Consumer<MyObject>>中的消费者?

批量顺序执行Consumer列表的简洁实现

你提到的for循环写法不仅不够简洁,还存在逻辑问题:调用result.andThen(consumer)后没有将返回的新Consumer赋值回result,最终只会执行第一个Consumer。下面是两种更简洁且正确的实现方式:

方式一:使用Stream.reduce(推荐)

利用Java Stream的reduce操作,可以快速将列表中的Consumer依次组合:

// Java 9+ 可以直接用Consumer.empty()作为默认值
Consumer<MyObject> combined = consumers.stream()
    .reduce(Consumer::andThen)
    .orElse(Consumer.empty());

// Java 8 可以用空Lambda作为默认值
// Consumer<MyObject> combined = consumers.stream()
//     .reduce(Consumer::andThen)
//     .orElse(obj -> {});

combined.accept(myvalue);
  • stream().reduce(Consumer::andThen)会遍历列表,将每个Consumer通过andThen串联成一个新的Consumer
  • orElse用于处理列表为空的情况,避免空指针异常

方式二:简化版for循环

如果不想用Stream,也可以优化原有的for循环,去掉null判断:

Consumer<MyObject> result = obj -> {}; // 初始化为空消费者
for (Consumer<MyObject> consumer : consumers) {
    result = result.andThen(consumer);
}
result.accept(myvalue);

这种写法无需判断null,逻辑更简洁,且能正确累积所有Consumer

内容的提问来源于stack exchange,提问作者user15110545

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:32:45