java判断list不为空的实现,和限制条数不要在一起写
场景
很多情况下,查单条记录也用通用查询接口,但是输入的条件却能确定唯一性。如果我们要确定list中只有一条记录,如下写法:
//记录不为空&&只有一条才继续
if(!CollectionUtils.isEmpty(list)&&1!=list.size()){
return"记录条数不是1";
}
Objectobject=list.get(0);
上面代码对么,貌似正确啊。后来报错了,被打脸了。
其实相当于>0&&!=1恰好漏掉了=0这种情况,
因此get(0)完美报错。
解决方案
像这种条件不要怕麻烦,多写几个if更清晰。
补充:判断一个java对象中的属性值是否为空(批量判断)
有时候数据库中的某些字段值要求不为空,所以代码中要判断这些字段对应的属性值是否为空,当对象属性过多时,一个一个属性去判断,会显得代码冗余,所以,可以借助工具类
importorg.apache.commons.lang.StringUtils;
importorg.springframework.beans.BeanUtils;
importorg.springframework.beans.FatalBeanException;
importjava.beans.PropertyDescriptor;
importjava.lang.reflect.Method;
importjava.lang.reflect.Modifier;
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.List;
publicclassIsNull{
//整个类都校验
publicstaticListvalidateProperty(ObjectvalidateObj){
returnvalidateProperty(validateObj,(String[])null);
}
//类中的某些字段不校验
publicstaticListvalidateProperty(ObjectvalidateObj,String...ignoreProperties){
PropertyDescriptor[]targetPds=BeanUtils.getPropertyDescriptors(validateObj.getClass());
ListignoreList=(ignoreProperties!=null?Arrays.asList(ignoreProperties):null);
ListerrList=newArrayList<>();
for(PropertyDescriptortargetPd:targetPds){
MethodreadMethod=targetPd.getReadMethod();
if(readMethod!=null&&(ignoreList==null||!ignoreList.contains(targetPd.getName()))){
try{
if(!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())){
readMethod.setAccessible(true);
}
Objectvalue=readMethod.invoke(validateObj);
if(valueinstanceofString){
if(StringUtils.isEmpty((String)value)){
errList.add(validateObj.getClass().getSimpleName()+"中的"+targetPd.getName()+"不能为空");
continue;
}
}
if(valueinstanceofFloat||valueinstanceofInteger){
if(StringUtils.isEmpty(value.toString())){
errList.add(validateObj.getClass().getSimpleName()+"中的"+targetPd.getName()+"不能为空");
continue;
}
}
if(value==null){
errList.add(validateObj.getClass().getSimpleName()+"中的"+targetPd.getName()+"不能为空");
}
}catch(Throwableex){
thrownewFatalBeanException(
"Couldnotcopyproperty'"+targetPd.getName()+"'fromsourcetotarget",ex);
}
}
}
returnerrList;
}
}
之后对拿到的数据进行业务判断
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。