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); } //类中的某些字段不校验 publicstaticList validateProperty(ObjectvalidateObj,String...ignoreProperties){ PropertyDescriptor[]targetPds=BeanUtils.getPropertyDescriptors(validateObj.getClass()); List ignoreList=(ignoreProperties!=null?Arrays.asList(ignoreProperties):null); List errList=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; } }
之后对拿到的数据进行业务判断
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。