java判断list不为空的实现,和限制条数不要在一起写

 更新时间:2021年01月25日 09:37:38   作者:chushiyunen  
这篇文章主要介绍了java判断list不为空的实现,和限制条数不要在一起写。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

场景

很多情况下,查单条记录也用通用查询接口,但是输入的条件却能确定唯一性。如果我们要确定list中只有一条记录,如下写法:

// 记录不为空 && 只有一条 才继续
if(!CollectionUtils.isEmpty(list) && 1!=list.size()){
  return "记录条数不是1";
}
Object object = list.get(0);

上面代码对么,貌似正确啊。后来报错了,被打脸了。

其实相当于 >0 && !=1 恰好漏掉了 =0 这种情况,

因此get(0)完美报错。

解决方案

像这种条件不要怕麻烦,多写几个if更清晰。

补充:判断一个java对象中的属性值是否为空(批量判断)

有时候数据库中的某些字段值要求不为空,所以代码中要判断这些字段对应的属性值是否为空,当对象属性过多时,一个一个属性去判断,会显得代码冗余,所以,可以借助工具类

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.FatalBeanException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class IsNull {
  //整个类都校验
  public static List<String> validateProperty(Object validateObj) {
    return validateProperty(validateObj,(String[])null);
  }
  //类中的某些字段不校验
  public static List<String> validateProperty(Object validateObj,String... ignoreProperties) {
    PropertyDescriptor[] targetPds = BeanUtils.getPropertyDescriptors(validateObj.getClass());
    List<String> ignoreList = (ignoreProperties != null ? Arrays.asList(ignoreProperties) : null);
    List<String> errList = new ArrayList<>();
    for (PropertyDescriptor targetPd : targetPds) {
      Method readMethod = targetPd.getReadMethod();
      if (readMethod != null && (ignoreList == null || !ignoreList.contains(targetPd.getName()))) {
        try {
          if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {
            readMethod.setAccessible(true);
          }
          Object value = readMethod.invoke(validateObj);
          if (value instanceof String) {
            if (StringUtils.isEmpty((String) value)) {
              errList.add(validateObj.getClass().getSimpleName()+ "中的" + targetPd.getName() + "不能为空");
              continue;
            }
          }
          if (value instanceof Float || value instanceof Integer) {
            if (StringUtils.isEmpty(value.toString())) {
              errList.add(validateObj.getClass().getSimpleName()+ "中的" + targetPd.getName() + "不能为空");
              continue;
            }
          }
          if (value == null) {
            errList.add(validateObj.getClass().getSimpleName() + "中的" + targetPd.getName() + "不能为空");
          }
        } catch (Throwable ex) {
          throw new FatalBeanException(
              "Could not copy property '" + targetPd.getName() + "' from source to target", ex);
        }
      }
    }
    return errList;
  }
}

之后对拿到的数据进行业务判断

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • SpringBoot自定义加载yml实现方式,附源码解读

    SpringBoot自定义加载yml实现方式,附源码解读

    这篇文章主要介绍了SpringBoot自定义加载yml实现方式附源码解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Java自定义协议报文封装 添加Crc32校验的实例

    Java自定义协议报文封装 添加Crc32校验的实例

    下面小编就为大家分享一篇Java自定义协议报文封装 添加Crc32校验的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Java中ArrayList和LinkedList的区别

    Java中ArrayList和LinkedList的区别

    ArrayList和LinkedList在这个方法上存在一定的性能差异,本文就介绍了Java中ArrayList和LinkedList的区别,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • SpringBoot文件上传的原理解析

    SpringBoot文件上传的原理解析

    这篇文章主要介绍了SpringBoot文件上传的原理解析,SpringBoot 文件上传是一种方便快捷的方式,可以将文件上传到服务器,通过使用SpringBoot的文件上传功能,可以轻松地实现文件上传功能,需要的朋友可以参考下
    2023-10-10
  • Java判断上传图片格式的实例代码

    Java判断上传图片格式的实例代码

    这篇文章主要介绍了Java判断上传图片格式的实例代码,在文中给大家提到了Java使用文件头的类型判断上传的文件是否为图片类型,需要的朋友可以参考下
    2019-06-06
  • Java基础题新手练习(三)

    Java基础题新手练习(三)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Java实现上传Excel文件并导入数据库

    Java实现上传Excel文件并导入数据库

    这篇文章主要介绍了在java的基础上学习上传Excel文件并导出到数据库,感兴趣的小伙伴不要错过奥
    2021-09-09
  • 解决spring jpa中update的坑

    解决spring jpa中update的坑

    这篇文章主要介绍了spring jpa中update遇到的坑及解决方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java代理模式与动态代理之间的关系以及概念

    Java代理模式与动态代理之间的关系以及概念

    代理模式是开发中常见的一种设计模式,使用代理模式可以很好的对程序进行横向扩展。动态代理:代理类在程序运行时被创建的代理方式。关键在于动态,程序具有了动态特性,可以在运行期间根据不同的目标对象生成动态代理对象
    2023-02-02
  • Java IO流—异常及捕获异常处理 try…catch…finally

    Java IO流—异常及捕获异常处理 try…catch…finally

    这篇文章主要介绍了Java IO流—异常及捕获异常处理 try…catch…finally,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论