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

Java Stream断言匹配结果获取及ValidatorAggregator实现技术问询

问题2:实现支持OR逻辑的ValidatorAggregator

首先咱们先明确一下基础类的结构(假设这些是你已经定义好的):

// 待验证的对象
class Thing {}

// 验证结果类,包含是否有效和原因
class ValidationResult {
    private final boolean valid;
    private final String reason;

    public ValidationResult(boolean valid, String reason) {
        this.valid = valid;
        this.reason = reason;
    }

    public boolean isValid() { return valid; }
    public String getReason() { return reason; }

    // 静态工厂方法,方便创建结果
    public static ValidationResult success(String reason) {
        return new ValidationResult(true, reason);
    }

    public static ValidationResult failure(String reason) {
        return new ValidationResult(false, reason);
    }
}

// 已有的Validator接口
interface Validator {
    ValidationResult isValid(Thing thing);
}

接下来实现ValidatorAggregator,核心要做到两点:短路返回成功结果、收集所有失败原因(如果全失败)。直接看代码:

import java.util.List;
import java.util.ArrayList;

public class ValidatorAggregator implements Validator {
    private final List<Validator> validators;

    // 构造器传入要聚合的所有Validator
    public ValidatorAggregator(List<Validator> validators) {
        this.validators = validators;
    }

    @Override
    public ValidationResult isValid(Thing thing) {
        List<String> failureReasons = new ArrayList<>();

        // 遍历所有Validator,一次遍历完成所有逻辑
        for (Validator validator : validators) {
            ValidationResult result = validator.isValid(thing);
            if (result.isValid()) {
                // 找到第一个成功的验证,直接返回,短路后续操作
                return result;
            }
            // 失败的话记录原因
            failureReasons.add(result.getReason());
        }

        // 所有验证都失败了,拼接所有原因返回
        String combinedReason = String.join("; ", failureReasons);
        return ValidationResult.failure("所有验证未通过:" + combinedReason);
    }
}

这个实现的优点:

  1. 短路逻辑:只要有一个Validator验证成功,立刻返回,不会执行后续验证,性能更好
  2. 一次遍历:只遍历一次Validator列表,避免重复调用验证方法(如果验证逻辑比较耗时,这点很重要)
  3. 清晰的失败信息:把所有失败原因拼接起来,方便排查问题或者给用户反馈
  4. 扩展性好:通过构造器传入Validator列表,要加新的验证逻辑直接传新的Validator就行,符合开闭原则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:18:10