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程序设计有所帮助。

相关文章

  • IDEA配置Maven并版本统一管理的实现

    IDEA配置Maven并版本统一管理的实现

    本文主要介绍了IDEA配置Maven并版本统一管理的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java注解方式之防止重复请求

    Java注解方式之防止重复请求

    这篇文章主要介绍了关于Java注解方式防止重复请求,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • idea2023设置启动参数、单元测试启动参数

    idea2023设置启动参数、单元测试启动参数

    在使用IDEA进行开发时,我们可以通过设置一些启动参数来优化开发环境的性能和体验,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • Java上传文件错误java.lang.NoSuchMethodException的解决办法

    Java上传文件错误java.lang.NoSuchMethodException的解决办法

    今天小编就为大家分享一篇关于Java上传文件错误java.lang.NoSuchMethodException的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 最新log4j2远程代码执行漏洞(附解决方法)

    最新log4j2远程代码执行漏洞(附解决方法)

    Apache Log4j2 远程代码执行漏洞攻击代码,该漏洞利用无需特殊配置,经多方验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响,本文就介绍一下解决方法
    2021-12-12
  • Java通过反射访问注解信息的方法示例

    Java通过反射访问注解信息的方法示例

    这篇文章主要介绍了Java通过反射访问注解信息的方法,结合实例形式分析了java基于反射访问类成员方法注解信息的相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • 基于web项目log日志指定输出文件位置配置方法

    基于web项目log日志指定输出文件位置配置方法

    下面小编就为大家分享一篇基于web项目log日志指定输出文件位置配置方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Spring Cloud Stream消息驱动组件使用方法介绍

    Spring Cloud Stream消息驱动组件使用方法介绍

    Spring Cloud Stream 消息驱动组件帮助我们更快速,更方便,更友好的去构建消息驱动微服务的。当时定时任务和消息驱动的⼀个对比。消息驱动:基于消息机制做一些事情
    2022-09-09
  • Java连接SqlServer错误的完美解决方法

    Java连接SqlServer错误的完美解决方法

    我们在做Java或者C#连接数据库的时候,常常遇到连接SqlServer失败的问题,明明检查了好几遍代码没问题了,还是连接不上,下面这篇文章主要给大家介绍了关于Java连接SqlServer错误的完美解决方法,需要的朋友可以参考下
    2023-04-04
  • Mybatis-Plus中分页插件PaginationInterceptor的使用

    Mybatis-Plus中分页插件PaginationInterceptor的使用

    我们在开发的过程中,经常会遇到分页操作,本文主要介绍了Mybatis-Plus中分页插件PaginationInterceptor的使用,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06

最新评论