Java实现过滤掉map集合中key或value为空的值示例

 更新时间:2018年06月26日 08:53:55   作者:May的博客  
这篇文章主要介绍了Java实现过滤掉map集合中key或value为空的值,涉及java针对map的简单遍历、判断、移除等相关操作技巧,需要的朋友可以参考下

本文实例讲述了Java实现过滤掉map集合中key或value为空的值。分享给大家供大家参考,具体如下:

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
 * 过滤掉map集合中key或value为空的值
 * @author lmb
 * @date 2017-3-14
 */
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 = (Object) 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 = (Object) iterator.next();
      Object value =(Object)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(isEmpty(str)){ //过滤掉为null和""的值 主函数输出结果map:{2=BB, 1=AA, 5=CC, 8= }
//      if("".equals(str.trim())){ //过滤掉为null、""和" "的值 主函数输出结果map:{2=BB, 1=AA, 5=CC}
        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();
      }
    }
  }
  public static boolean isEmpty(Object obj){
    return obj == null || obj.toString().length() == 0;
  }
  public static void main(String[] args) {
    Map map = new HashMap();
    map.put(1, "AA");
    map.put("2", "BB");
    map.put("5", "CC");
    map.put("6",null);
    map.put("7", "");
    map.put("8", " ");
    System.out.println(map);//输出结果:{2=BB, 1=AA, 7=, 6=null, 5=CC, 8= }
    removeNullEntry(map);
    System.out.println(map);
  }
}

运行结果:

{1=AA, 2=BB, 5=CC, 6=null, 7=, 8=  }
{1=AA, 2=BB, 5=CC, 8=  }

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • 在Java中将List转换为String输出过程解析

    在Java中将List转换为String输出过程解析

    这篇文章主要介绍了在Java中将List转换为String输出过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Java数据开发辅助工具Docker与普通程序使用方法

    Java数据开发辅助工具Docker与普通程序使用方法

    这是为数据开发人员使用的辅助工具,用于数据库之间的表同步,说同步并不严谨,因为不是实时更新的,更确切的说法是复制,可以方便的从一个数据库复制表到另一个数据库,以下遇到同步的词请理解为复制
    2021-09-09
  • IDEA 2021.1 的 Win 和 Mac 快捷键大全

    IDEA 2021.1 的 Win 和 Mac 快捷键大全

    这篇文章主要介绍了IDEA 2021.1 的 Win 和 Mac 快捷键大全,本文是小编给大家精心收藏的,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 带你快速搞定java IO

    带你快速搞定java IO

    这篇文章主要介绍了Java IO流 文件传输基础的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下,希望能给你带来帮助
    2021-07-07
  • Java黑科技之通过Google Java Style 文件配置IDEA和Ecplise代码风格

    Java黑科技之通过Google Java Style 文件配置IDEA和Ecplise代码风格

    在日常开发中,多人团队协作开发一个项目是很常见的,特别是大公司,这就会涉及到多人在一个工程上开发代码.无规矩不成方圆,一个好的代码风格,更加有利于团队协作,减少代码冲突,提高代码可阅读性,美观性.本文就带着大家仔细研究这个黑科技 ,需要的朋友可以参考下
    2021-05-05
  • Spring:如何使用枚举参数

    Spring:如何使用枚举参数

    这篇文章主要介绍了springboot枚举类型传递的步骤,帮助大家更好的理解和学习使用springboot,感兴趣的朋友可以了解下,希望能给你带来帮助
    2021-08-08
  • Springboot源码 AbstractAdvisorAutoProxyCreator解析

    Springboot源码 AbstractAdvisorAutoProxyCreator解析

    这篇文章主要介绍了Springboot源码 AbstractAdvisorAutoProxyCreator解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 微服务eureka和nacos案例详解

    微服务eureka和nacos案例详解

    这篇文章主要介绍了微服务eureka和nacos,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Java中的Thread.join()详解

    Java中的Thread.join()详解

    这篇文章主要介绍了Thread.join()详解 ,join是Thread类的一个方法,启动线程后直接调用,本文通过实例代码介绍了join方法的作用及用法详解,需要的朋友可以参考下
    2023-09-09
  • 微信小程序 springboot后台如何获取用户的openid

    微信小程序 springboot后台如何获取用户的openid

    这篇文章主要介绍了微信小程序 springboot后台如何获取用户的openid,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09

最新评论