【问题标题】:java vavr map return from function if statementjava vavr map从函数if语句返回
【发布时间】:2021-11-25 06:15:57
【问题描述】:

我有密码

private static Validation<ConstraintViolation, List<Person>> validatePersonDetail(
        List<PersonDetailRequest> personRequest) {
    
    for (PersonRequest request:personRequest) {
        
        if (isNull(request.getName())) {
            return invalid(new ConstraintViolation("name", "name cannot be empty"));
        }
        ..
        // more validations
        
        // build object
        Person.builder().name(request.getName()).build();
    }
    return valid([PERSON_LIST]);
}

我想返回人员列表,但不确定如何使用 Vavr。我不能使用验证组合,因为它包含嵌套对象的嵌套验证

【问题讨论】:

    标签: java vavr


    【解决方案1】:

    假设当列表通过所有验证时,您只是构建Person, 那么map就是你所需要的:

    private static Validation<ConstraintViolation, List<Person>> validatePersonDetail(
            List<PersonRequest> personRequest) {
    
        for (PersonRequest request:personRequest) {
    
            if (isNull(request.getName())) {
                return invalid(new ConstraintViolation("name", "name cannot be empty"));
            }
            // more validations
    
        }
        return valid(personRequest.map(request->Person.builder().name(request.getName()).build()));
    }
    

    【讨论】:

      【解决方案2】:

      我会推荐这样的东西。从validatePersonDetail 返回错误列表并检查它是否为空或为空,如果为空则继续执行:

      private void mainExecution() {
          Validation<ConstraintViolation> validationErrors = validatePersonDetail(personRequest);
          if(validatePersonDetail().isEmpty) {
              return valid([PERSON_LIST]);
          } else {
              throw new ValidationFailedException(validationErrors);
          }
      }
      
      private static Validation<ConstraintViolation> validatePersonDetail(
                  List<PersonDetailRequest> personRequest) {
          Validation<ConstraintViolation> validations = new ArrayList<>();
          for (PersonRequest request:personRequest) {
              if (isNull(request.getName())) {
                  return validations.add(new ConstraintViolation("name", "name cannot be empty"));
              }
              ..
              // more validations
          }
          return validations;
      }
      

      【讨论】:

      • 我正在使用 vavr。 Validation&lt;ConstraintViolation&gt; validations = new ArrayList&lt;&gt;(); 无法使用。仅使用 vavr 的库寻找解决方案
      猜你喜欢
      • 1970-01-01
      • 2013-07-05
      • 2013-12-04
      • 2017-07-27
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      相关资源
      最近更新 更多