zoukankan      html  css  js  c++  java
  • 过滤Map中的空值

      


    /**
    *
    * @author puxiaozhe
    * @description 过滤掉map集合中key或value为空的值
    * @date 2020-08-08
    **/
    public class MapRemoveNullUtil {

    /**
    * 移除map中空key或者value空值
    *
    * @param map
    */
    public static void removeNullEntry(Map map) {
    removeNullKey(map);
    removeNullValue(map);
    }

    /**
    * 移除map的空key
    *
    * @param map
    * @return
    */
    public static void removeNullKey(Map map) {
    Set set = map.keySet();
    for (Iterator iterator = set.iterator(); iterator.hasNext(); ) {
    Object obj = iterator.next();
    remove(obj, iterator);
    }
    }

    /**
    * 移除map中的value空值
    *
    * @param map
    * @return
    */
    public static void removeNullValue(Map map) {
    Set set = map.keySet();
    for (Iterator iterator = set.iterator(); iterator.hasNext(); ) {
    Object obj = iterator.next();
    Object value = map.get(obj);
    remove(value, iterator);
    }
    }

    /**
    * 移除map中的空值
    *
    * Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。
    * Iterator 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,
    * 所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出 java.util.ConcurrentModificationException 异常。
    * 所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。
    * 可以使用 Iterator 本身的方法 remove() 来删除对象, Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。
    *
    * @param obj
    * @param iterator
    */
    private static void remove(Object obj, Iterator iterator) {
    if (obj instanceof String) {
    String str = (String) obj;
    if (StringUtils.isBlank(str)) {
    iterator.remove();
    }

    } else if (obj instanceof Collection) {
    Collection col = (Collection) obj;
    if (col == null || col.isEmpty()) {
    iterator.remove();
    }

    } else if (obj instanceof Map) {
    Map temp = (Map) obj;
    if (temp == null || temp.isEmpty()) {
    iterator.remove();
    }

    } else if (obj instanceof Object[]) {
    Object[] array = (Object[]) obj;
    if (array == null || array.length <= 0) {
    iterator.remove();
    }
    } else {
    if (obj == null) {
    iterator.remove();
    }
    }
    }
    }
  • 相关阅读:
    深入Celery之使用队列以及优先级提高响应
    Redis真的那么好用吗?
    Python中的绝对导入和相对导入
    七个可以提升python程序性能的好习惯
    log封装-python3
    通过zoopkeeper客户端查看Kafka主题实例ip(需要知道任意一个zk地址)
    python3-kafka生产者可入json数据(pykafka)
    python3-数据库插入数据(pymysql)
    unittest显示用例名称
    appium(1)-获取APPdriver封装
  • 原文地址:https://www.cnblogs.com/pxzbky/p/13462226.html
Copyright © 2011-2022 走看看