Java實(shí)現(xiàn)過濾掉map集合中key或value為空的值示例
本文實(shí)例講述了Java實(shí)現(xiàn)過濾掉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 是工作在一個(gè)獨(dú)立的線程中,并且擁有一個(gè) mutex 鎖。 * Iterator 被創(chuàng)建之后會(huì)建立一個(gè)指向原來對象的單鏈索引表,當(dāng)原來的對象數(shù)量發(fā)生變化時(shí),這個(gè)索引表的內(nèi)容不會(huì)同步改變, * 所以當(dāng)索引指針往后移動(dòng)的時(shí)候就找不到要迭代的對象,所以按照 fail-fast 原則 Iterator 會(huì)馬上拋出 java.util.ConcurrentModificationException 異常。 * 所以 Iterator 在工作的時(shí)候是不允許被迭代的對象被改變的。 * 但你可以使用 Iterator 本身的方法 remove() 來刪除對象, Iterator.remove() 方法會(huì)在刪除當(dāng)前迭代對象的同時(shí)維護(hù)索引的一致性。 * @param obj * @param iterator */ private static void remove(Object obj,Iterator iterator){ if(obj instanceof String){ String str = (String)obj; if(isEmpty(str)){ //過濾掉為null和""的值 主函數(shù)輸出結(jié)果map:{2=BB, 1=AA, 5=CC, 8= } // if("".equals(str.trim())){ //過濾掉為null、""和" "的值 主函數(shù)輸出結(jié)果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);//輸出結(jié)果:{2=BB, 1=AA, 7=, 6=null, 5=CC, 8= } removeNullEntry(map); System.out.println(map); } }
運(yùn)行結(jié)果:
{1=AA, 2=BB, 5=CC, 6=null, 7=, 8= }
{1=AA, 2=BB, 5=CC, 8= }
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
IDEA配置Maven并版本統(tǒng)一管理的實(shí)現(xiàn)
本文主要介紹了IDEA配置Maven并版本統(tǒng)一管理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09idea2023設(shè)置啟動(dòng)參數(shù)、單元測試啟動(dòng)參數(shù)
在使用IDEA進(jìn)行開發(fā)時(shí),我們可以通過設(shè)置一些啟動(dòng)參數(shù)來優(yōu)化開發(fā)環(huán)境的性能和體驗(yàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11Java上傳文件錯(cuò)誤java.lang.NoSuchMethodException的解決辦法
今天小編就為大家分享一篇關(guān)于Java上傳文件錯(cuò)誤java.lang.NoSuchMethodException的解決辦法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01最新log4j2遠(yuǎn)程代碼執(zhí)行漏洞(附解決方法)
Apache?Log4j2?遠(yuǎn)程代碼執(zhí)行漏洞攻擊代碼,該漏洞利用無需特殊配置,經(jīng)多方驗(yàn)證,Apache?Struts2、Apache?Solr、Apache?Druid、Apache?Flink等均受影響,本文就介紹一下解決方法2021-12-12基于web項(xiàng)目log日志指定輸出文件位置配置方法
下面小編就為大家分享一篇基于web項(xiàng)目log日志指定輸出文件位置配置方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04Spring?Cloud?Stream消息驅(qū)動(dòng)組件使用方法介紹
Spring?Cloud?Stream?消息驅(qū)動(dòng)組件幫助我們更快速,更方便,更友好的去構(gòu)建消息驅(qū)動(dòng)微服務(wù)的。當(dāng)時(shí)定時(shí)任務(wù)和消息驅(qū)動(dòng)的?個(gè)對比。消息驅(qū)動(dòng):基于消息機(jī)制做一些事情2022-09-09Mybatis-Plus中分頁插件PaginationInterceptor的使用
我們在開發(fā)的過程中,經(jīng)常會(huì)遇到分頁操作,本文主要介紹了Mybatis-Plus中分頁插件PaginationInterceptor的使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06