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;
  }
}

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

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

(0)

相关推荐

  • Java中ArrayList集合的常用方法大全

    ArrayList集合的创建 非泛型 创建ArrayList集合对象,可以添加任意Object子类元素至集合 //非泛型创建的ArrayList集合对象可以保存任何类型的值 ArrayList list = new ArrayList(); list.add("str");//存入String类型数据 list.add(23);//存入int类型数据 list.add(2.5);//存入double类型数据 list.add('c');//存入char类型数据 泛型 采用泛型创建Arr

  • java中Map、Set、List的简单使用教程(快速入门)

    Map.Set.List List的常用方法 1.创建 List<Integer> list = new ArrayList<>(); List<Integer> list = new LinkedList<>(); //同时可以作为链表用 List<List<Integer>> list = new ArrayList<>(); 2.遍历 //本质上其实是调用Iterator for(String s:list){ Sy

  • Java Vector和ArrayList的异同分析及实例讲解

    在线程中有两种常用的方法,能够通过数组实现相应的功能,但除此之外在区别上也是很明显的.本篇就其中的代表方法ArrayList和Vector进行比较分析,一个是非线程安全,另一个是线程安全.在进行相同和不同点的分析之后,带来二者的实例代码对比,帮助大家体会它们的异同. 1.相同点 (1)都是有序集合. (2)数据不允许重复. (3)都实现了list接口. (4)都是通过数组实现的. (5)数组进行复制.移动.代价比较高,因此,适合随机查询和遍历,不适合插入和删除. 2.不同点 (1)ArrayLi

  • java中ArrayList和LinkedList的区别详解

    ArrayList和LinkedList都实现了List接口,有以下的不同点: 1.ArrayList是基于索引的数据接口,它的底层是数组.它可以以O(1)时间复杂度对元素进行随机访问.与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n). 2.相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者

  • java中String,数组,ArrayList三者之间的转换

    ArrayList转为String和数组 造一个元素为Integer的ArrayList 为list_int 造一个元素为String 的 ArrayList 为list_str ArrayList list_int = new ArrayList<Integer>(); //Integer的List list_int.add(1); list_int.add(3); list_int.add(5); list_int.add(9); ArrayList<String> list_

  • java中List去除重复数据的5种方式总结

    前言 List 是一个接口,它继承于Collection的接口.它代表着有序的队列.当我们讨论List的时候,一般都和Set作比较. List中元素可以重复,并且是有序的(这里的有序指的是按照放入的顺序进行存储.如按照顺序把1,2,3存入List,那么,从List中遍历出来的顺序也是1,2,3). Set中的元素不可以重复,并且是无序的(从set中遍历出来的数据和放入顺序没有关系). 以下介绍五种-不同的方法去除 Java 中ArrayList中的重复数据 1.使用LinkedHashSet删除

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

    场景 很多情况下,查单条记录也用通用查询接口,但是输入的条件却能确定唯一性.如果我们要确定list中只有一条记录,如下写法: // 记录不为空 && 只有一条 才继续 if(!CollectionUtils.isEmpty(list) && 1!=list.size()){ return "记录条数不是1"; } Object object = list.get(0); 上面代码对么,貌似正确啊.后来报错了,被打脸了. 其实相当于 >0 &

  • Java判断对象是否为空(包括null ,"")的方法

    本文实例为大家分享了Java判断对象是否为空的具体代码,供大家参考,具体内容如下 package com.gj5u.publics.util; import java.util.List; /** * 判断对象是否为空 * * @author Rex * */ public class EmptyUtil { /** * 判断对象为空 * * @param obj * 对象名 * @return 是否为空 */ @SuppressWarnings("rawtypes") public

  • java 判断list是否为空过程解析

    问题: 之前用 list!=null 来判断list是否为空,但发现,定义一个list后,即使里面并没有加入任何元素,返回的结果仍旧是 true, 其实,本意是希望在没有任何元素时,返回 false,下面是关于判断逻辑的详细解析: 1.如果想判断list是否为空,可以这么判断: if(list == null || list.size() ==0 ){ //为空的情况 }else{ //不为空的情况 } 2.list.isEmpty() 和 list.size()==0 的区别 答案:没有区别

  • java判断字符串String是否为空问题浅析

    一.判断一个字符串str不为空的方法有: 1.str == null;2."".equals(str);3.str.length <= 0;4.str.isEmpty();注意:length是属性,一般集合类对象拥有的属性,取得集合的大小.            例如:数组.length就是取得数组的长度.          length()是方法,一般字符串类对象有该方法,也是取得字符串长度.            例如:字符串.length();说明:  1.null表示这个

  • Java应该在哪里判断List是否为空

    目录 前言 一个问题 解决方案 更好的方案 总结 前言 在新的一年,我又重新回到了Java技术栈(我肯定是疯了!).有句诗说得好,不识庐山真面目,只缘身在此山中.我仍然喜欢函数式编程,但我现在需要离它远一点,这样才能更好地理解它. 在这篇博客中,我会分享一个在项目中遇到的问题,看看能不能有更好的解决方案. 一个问题 我们有一个函数,返回的是一个Panel List public Optional<List<Panel>> generatePanels() { ... return

  • java如何判断一个对象是否为空对象

    最近项目中遇到一个问题,在用户没填数据的时候,我们需要接收从前端传过来的对象为null,但是前端说他们一个一个判断特别麻烦,只能传个空对象过来,我第一个想法就是可以通过反射来判断对象是否为空. 第一版: User.java public class User {     private String username;     private Boolean active;     private Long id;     // 省略get和set方法 } ReflectUtil.java pu

  • JAVA判断空值方法原理解析

    Java空字符串与null的区别: 1.类型 null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ; ""表示的是一个空字符串,也就是说它的长度为0.例如声明一个字符串String str = "" ; 2.内存分配 String str = null ; 表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间: String str = ""; 表示声明一个字符串类

  • Java中判断对象是否为空的方法的详解

    首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的: 另一种是org.springframework.util包下的.这两种StringUtils工具类判断对象是否为空是有差距的: StringUtils.isEmpty(CharSequence cs); //org.apache.commons.lang3包下的StringUtils类,判断是否为空的方法参数是字符序列类,也就是String类型 StringUtils.isEmpt

  • java判断是否空最简单的方法

    java判断是否空的方法: 1.判断字符串或者对象是否为空 StringUtils的判断 StringUtils.isEmpty(CharSequence cs); //org.apache.commons.lang3包下的StringUtils类,判断是否为空的方法参数是字符序列类,也就是String类型 StringUtils.isEmpty(Object str); //而org.springframework.util包下的参数是Object类,也就是不仅仅能判断String类型,还能判

  • Java 判断实体对象及所有属性是否为空的操作

    1.判断实体对象是否为空 2.判断对象所有属性是否为空 3.特别注意,实体类中如果有基本数据类型,会影响判断 package com.liuxd.object; import org.apache.commons.lang3.StringUtils; import java.lang.reflect.Field; /** * Created by Liuxd on 2018/11/2. */ public class TestEntity { public static void main(St

随机推荐