• 过滤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();
    }
    }
    }
    }
  • 相关阅读:
    高考词根树 高考词汇3071
    浏览器的文件访问 API 入门(英文) 资料
    translate speaker 翻译朗读者API vscode 插件推荐 单词发音
    .bat 批处理 手册 教程
    阿里巴巴20220422笔试编程题
    leetcode 587 安装栅栏
    记录一些面试题
    Java编辑提示错误: 编码 GBK 的不可映射字符 (0x80)
    Struct和Class区别?
    Swift String 与 NSString
  • 原文地址:https://www.cnblogs.com/pxzbky/p/13462226.html
Copyright © 2020-2023  润新知