zoukankan      html  css  js  c++  java
  • 过滤掉map集合中key或value为空的值

     1 package cn.com.utils;
     2 
     3 import org.apache.commons.lang3.StringUtils;
     4 
     5 import java.util.Collection;
     6 import java.util.Iterator;
     7 import java.util.Map;
     8 import java.util.Set;
     9 
    10 /**
    11  * 过滤掉map集合中key或value为空的值
    12  *
    13  * @author lmb
    14  * @date 2017-3-14
    15  */
    16 public class MapRemoveNullUtil {
    17 
    18     /**
    19      * 移除map中空key或者value空值
    20      *
    21      * @param map
    22      */
    23     public static void removeNullEntry(Map map) {
    24         removeNullKey(map);
    25         removeNullValue(map);
    26     }
    27 
    28     /**
    29      * 移除map的空key
    30      *
    31      * @param map
    32      * @return
    33      */
    34     public static void removeNullKey(Map map) {
    35         Set set = map.keySet();
    36         for (Iterator iterator = set.iterator(); iterator.hasNext(); ) {
    37             Object obj = iterator.next();
    38             remove(obj, iterator);
    39         }
    40     }
    41 
    42     /**
    43      * 移除map中的value空值
    44      *
    45      * @param map
    46      * @return
    47      */
    48     public static void removeNullValue(Map map) {
    49         Set set = map.keySet();
    50         for (Iterator iterator = set.iterator(); iterator.hasNext(); ) {
    51             Object obj = iterator.next();
    52             Object value = map.get(obj);
    53             remove(value, iterator);
    54         }
    55     }
    56 
    57     /**
    58      * 移除map中的空值
    59      * <p>
    60      * Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。
    61      * Iterator 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,
    62      * 所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出 java.util.ConcurrentModificationException 异常。
    63      * 所以 Iterator 在工作的时候是不允许被迭代的对象被改变的。
    64      * 但你可以使用 Iterator 本身的方法 remove() 来删除对象, Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。
    65      *
    66      * @param obj
    67      * @param iterator
    68      */
    69     private static void remove(Object obj, Iterator iterator) {
    70         if (obj instanceof String) {
    71             String str = (String) obj;
    72             if (StringUtils.isBlank(str)) {
    73                 iterator.remove();
    74             }
    75 
    76         } else if (obj instanceof Collection) {
    77             Collection col = (Collection) obj;
    78             if (col == null || col.isEmpty()) {
    79                 iterator.remove();
    80             }
    81 
    82         } else if (obj instanceof Map) {
    83             Map temp = (Map) obj;
    84             if (temp == null || temp.isEmpty()) {
    85                 iterator.remove();
    86             }
    87 
    88         } else if (obj instanceof Object[]) {
    89             Object[] array = (Object[]) obj;
    90             if (array == null || array.length <= 0) {
    91                 iterator.remove();
    92             }
    93         } else {
    94             if (obj == null) {
    95                 iterator.remove();
    96             }
    97         }
    98     }
    99 }
  • 相关阅读:
    发改委-国资委
    IE6 — 你若安好,便是晴天霹雳 [ 乱弹 ]
    Java实现LeetCode_0001_Two Sum
    Java实现LeetCode_0014_LongestCommonPrefix
    Java实现LeetCode_0014_LongestCommonPrefix
    Java实现LeetCode_0007_ReverseInteger
    Java实现LeetCode_0007_ReverseInteger
    Java实现LeetCode_0007_ReverseInteger
    Java实现LeetCode_0014_LongestCommonPrefix
    Java实现LeetCode_0014_LongestCommonPrefix
  • 原文地址:https://www.cnblogs.com/bevis-byf/p/11691752.html
Copyright © 2011-2022 走看看