考虑下面的类
Class RequestBodyResource {
private RequestVariable1 att1;
private String att2;
private String att3;
}
我有一个方法应该在两种情况下返回 false
- 如果 RequestBodyResource 对象的所有 3 个属性都为 null/空
- 如果多个属性不为空
基本上是“至少一个”或“至多一个”
相同的代码是
public boolean validateExactlyOneRequiredRequestParam(RequestBodyResource request) {
//The below 3 conditions are to test that only one request is present
if(StringUtils.isNotEmpty(request.getAtt3()) && null != request.getAtt1()) {
return false;
}
if(StringUtils.isNotEmpty(request.getAtt2()) && null != request.getAtt1()) {
return false;
}
if(StringUtils.isNotEmpty(request.getAtt3()) && StringUtils.isNotEmpty(request.getAtt2())) {
return false;
}
//The below condition is to test that at least one request is present
if(StringUtils.isEmpty(request.getAtt3()) && null == request.getAtt1() && StringUtils.isEmpty(request.getAtt2())) {
return false;
}
return true;
}
如何使用 Java 8 Optional 使这段代码更易于编写和阅读?
最佳答案
为什么不只是数数呢?
int count = 0;
if(request.getAtt1() !=null) {
count++;
}
if(StringUtils.isNotEmpty(request.getAtt2())) {
count++;
}
if(StringUtils.isNotEmpty(request.getAtt3())) {
count++;
}
return count == 1;
带有可选
的版本(不要使用,添加它只是为了好玩)。
return Optional.ofNullable(request.getAtt1()).map(ignore -> 1).orElse(0)
+ Optional.ofNullable(request.getAtt2()).map(ignore -> 1).orElse(0)
+ Optional.ofNullable(request.getAtt3()).map(ignore -> 1).orElse(0)
== 1;
也缺少对空字符串的检查。
关于java - 如何使用 Java Optional 转换复杂的 if 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54664276/