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

作者:May的博客 时间:2021-05-25 10:26:17 

本文实例讲述了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程序设计有所帮助。

来源:https://blog.csdn.net/lmb55/article/details/64551373

标签:Java,过滤,map集合
0
投稿

猜你喜欢

  • Java字符串查找的三种方式

    2023-11-18 22:00:30
  • Spring启动过程中实例化部分代码的分析之Bean的推断构造方法

    2022-08-26 02:00:07
  • C#子线程执行完后通知主线程的方法

    2022-02-26 20:15:40
  • idea的easyCode的 MybatisPlus模板的配置详解

    2022-04-18 21:01:29
  • java实现人员信息管理系统

    2023-11-02 05:21:31
  • C# SQlite操作方法小结

    2021-10-01 15:56:09
  • Unity 百度AI实现Logo商标识别

    2023-06-09 17:04:26
  • Linux中Java开发常用软件安装方法总结

    2022-03-11 16:21:03
  • Java的运算符和程序逻辑控制你了解吗

    2023-01-19 10:01:59
  • Mybatis使用JSONObject接收数据库查询的方法

    2023-01-17 05:10:43
  • 一文解决springboot打包成jar文件无法正常运行的问题

    2021-11-03 14:54:28
  • Java调用接口如何获取json数据解析后保存到数据库

    2023-11-16 15:01:36
  • 3分钟纯 Java 注解搭个管理系统的示例代码

    2023-05-29 07:57:46
  • 面试官:详细谈谈Java对象的4种引用方式

    2022-09-19 04:52:20
  • C#的TimeSpan案例详解

    2023-11-20 11:34:52
  • Java使用join方法暂停当前线程

    2023-11-03 04:32:31
  • 在Spring Boot中加载初始化数据的实现

    2023-08-18 10:01:44
  • c#生成站点地图(SiteMapPath)文件示例程序

    2022-08-03 02:26:55
  • SpringBoot返回Json对象报错(返回对象为空{})

    2022-06-30 03:31:19
  • java虚拟机钩子关闭函数addShutdownHook的操作

    2021-10-18 00:58:25
  • asp之家 软件编程 m.aspxhome.com