更好的方法来测试非空字段

时间:2017-05-23 14:40:50

标签: java spring spring-boot java-8

我有一个包含一些字段的对象,我想检查某些字段是否为空且不为空。在java 8或apache实用程序中是否有一个很好的方法...

我不想做像

这样的事情
if(myObj.getMyField1 != null || myObj.getMyField1 != "" || myObj.getMyField2 != null || myObj.getMyField2 != "" || myObj.getMyField3 != null || myObj.getMyField3 != "") {} 

这是myObj

@Data // lombok for generating getters and setters
public class Myobj {
   private String myField1;
   private String myField2;
   private String myField3;
   private String myField4;
   private String myField5;

   private AnotherObj myField6;

}

你有什么建议吗?

3 个答案:

答案 0 :(得分:5)

您可以使用java-8 Stream#anyMatch检查字符串是null还是空。例如:

boolean hasNullOrEmptyString = Stream.of(myField1,myField2,...,myFieldN)
                                     .anyMatch(it-> it==null || it.isEmpty());

OR 你可以用方法引用表达式替换lambda表达式,以后可以重用该方法:

boolean hasNullOrEmptyString = Stream.of(myField1,myField2,...,myFieldN)
                                     .anyMatch(this::isNullOrEmptyString);

boolean isNullOrEmptyString(String it){
  return it==null || it.isEmpty();
}

,因为我看到您的问题标记为spring,而spring已经有一个实用工具StringUtils#isEmpty用于检查Stringnull还是空:

boolean hasNullOrEmptyString = Stream.of(myField1,myField2,...,myFieldN)
                                     .anyMatch(StringUtils::isEmpty);

答案 1 :(得分:2)

答案 2 :(得分:2)

您已将此标记为spring-boot,因此我假设您可能正在使用控制器并验证其参数。如果是这种情况,请执行

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Data
public class Myobj {
   @NotNull
   @Size(min = 1)
   private String myField1;
   @NotNull
   @Size(min = 1)
   private String myField2;
   /* etc */
}

@RequestMapping(value = "/some/url", method = POST)
public void yourMethod(@RequestBody @Valid YourObject yourObject) {
    // 
}

然后您的对象将在实例化时验证。