BiFunction的使用

背景:如果一个商家有A,B二个门店,想把A的属性复制给B

主要使用BiFunction的使用

实现:

public interface CopyRule {

    /**
     * 对in执行拷贝结果到out中.
     *
     * @param in
     * @param out
     * @return
     */
    boolean copy(CopyIn in, CopyOut out);

    /**
     * 当此条校验不通过的时候,对应的错误码是什么.
     *
     * @return
     */
    FailReasonEnum errorCode();
}
public enum ShopCopyRule implements CopyRule {

    BUSINESS_MODE((i, o) -> {
        o.getShopOrderRequest().setBussinessMode(i.getSource().getOrderInfo().getBussinessMode());
        return true;
    }, COPY_ORDER_FIELD_FAILED),

    
    NUMBER_LIMIT((i, o) -> {
        o.getShopOrderRequest().setNumberLimited(i.getSource().getOrderInfo().getNumberLimited());
        return true;
    }, COPY_ORDER_FIELD_FAILED);

    /**
     * 业务规则
     */
    private final BiFunction<CopyIn, CopyOut, Boolean> function;

    /**
     * 校验失败时对应的错误码.
     */
    private final FailReasonEnum errorCode;

    ShopCopyRule(BiFunction<CopyIn, CopyOut, Boolean> function, FailReasonEnum errorCode) {
        this.function = function;
        this.errorCode = errorCode;
    }

    @Override
    public boolean copy(CopyIn in, CopyOut out) {
        return function.apply(in, out);
    }

    @Override
    public FailReasonEnum errorCode() {
        return errorCode;
    }
  //统一调用这个方法
   public List<ErrorContext> copyRule(CopyItem copyItem, CopyIn in,
                                                       CopyOut out) {
        List<ErrorContext> errors = Lists.newArrayList();
        for (ShopCopyRule rule : ShopCopyRule.values()) {
            if (-1 == 开关.indexOf(rule.name())) {
                continue;
            }

            if (!rule.copy(in, out)) {
                LoggerUtil.warn(LOGGER, "执行规则:{0}时失败", rule.name());
                errors.add(new ErrorContext(rule.errorCode().getId()));
            }
        }
        LoggerUtil.info(LOGGER, "完成执行:{0}规则", copyItem);
        return errors;
    }

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值