Java实现过滤掉map集合中key或value为空的值示例
作者:May的博客 发布时间:2021-05-25 10:26:17
标签: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程序设计有所帮助。
来源:https://blog.csdn.net/lmb55/article/details/64551373


猜你喜欢
- c# label的内容显示不全,需要设置如下属性即可:1、将Lable的font属性的字体改成宋体;2、将AutoSize属性改成true;
- Java高德地图Api的使用使用高德经纬度获取地址信息一些准备用到的常量 /** *
- 根据条件改变DataGridView行的颜色可以使用RowPrePaint事件。示例程序界面如下:示例程序代码如下:using System
- 前言中国象棋是起源于中国的一种棋,属于二人对抗 * 的一种,在中国有着悠久的历史。由于用具简单,趣味性强,成为流行极为广泛的棋艺活动。中国象
- 最近没事写了一个简易浏览器,在刚开始写的时候遇到一些问题,主要的问题就是如何在自己的webview中显示所有的网页数据,不过不指
- 在Android应用中,图片裁剪也是一个经常用到的功能。Android系统中可以用隐式意图调用系统应用进行裁剪,但是这样做在不同的手机可能表
- Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spr
- 一、通过程序看现象在开始为大家讲解Java 多线程缓存模型之前,我们先看下面的这一段代码。这段代码的逻辑很简单:主线程启动了两个子线程,一个
- 创建文件或文件夹您可通过编程方式在您的计算机上创建文件夹、子文件夹和子文件夹中的文件,并将数据写入文件。public class Creat
- 泛型List<T>中有一个比较列表是否已包含对象的方法Contains<T>(),今天在网上搜了一个用法,记录下来,
- spring boot是个好东西,可以不用容器直接在main方法中启动,而且无需配置文件,方便快速搭建环境。可是当我们要同时启动2个spri
- 前言我们都知道WebApi是依赖于Asp.Net MVC的 ,所以,想创建WebApi,就需要先创建一个Asp.Net MVC项目。但用Vi
- 思路如下:创建一个类,通过extends使其继承窗体类JFrame;创建一个JFrame对象,使用JFrame类的setVisible()方
- for循环和foreach循环的区别首先在这里声明一点,C#和Java这两种语言很相似,尤其是初学的数据类型那一部分,所以这里写的for和f
- 什么是banner组件?在许多Android应用上,比如爱奇艺客户端、百度美拍、应用宝等上面,都有一个可以手动滑动的小广告条,这就是bann
- 本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正。什么是ZXing.Net
- 本文实例讲述了spring AOP的Around增强实现方法。分享给大家供大家参考,具体如下:一 配置<?xml version=&q
- 首先描述一下问题,spring boot 使用的是内嵌的tomcat, 所以不清楚文件上传到哪里去了, 而且spring boot 把静态的
- JSONObject toJSONString错误1.com.alibaba.fastjson.JSONObject 继承了JSON可以使用
- 本文实例讲述了Java循环队列原理与用法。分享给大家供大家参考,具体如下:在正式进行循环队列学习之前,我们先来看看在顺序队列中删除队首元素出