All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.utils.common.MapUtils Maven / Gradle / Ivy

package dev.utils.common;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import dev.utils.DevFinal;
import dev.utils.JCLogUtils;

/**
 * detail: Map 工具类
 * @author Ttt
 */
public final class MapUtils {

    private MapUtils() {
    }

    // 日志 TAG
    private static final String TAG = MapUtils.class.getSimpleName();

    // =======
    // = Map =
    // =======

    /**
     * 判断 Map 是否为 null
     * @param map {@link Map}
     * @return {@code true} yes, {@code false} no
     */
    public static boolean isEmpty(final Map map) {
        return (map == null || map.isEmpty());
    }

    /**
     * 判断 Map 是否不为 null
     * @param map {@link Map}
     * @return {@code true} yes, {@code false} no
     */
    public static boolean isNotEmpty(final Map map) {
        return (map != null && !map.isEmpty());
    }

    // ==========
    // = 判断长度 =
    // ==========

    /**
     * 获取 Map 长度
     * @param map {@link Map}
     * @return 如果 Map 为 null, 则返回默认长度, 如果不为 null, 则返回 map.size()
     */
    public static int length(final Map map) {
        return length(map, 0);
    }

    /**
     * 获取 Map 长度
     * @param map           {@link Map}
     * @param defaultLength 集合为 null 默认长度
     * @return 如果 Map 为 null, 则返回 defaultLength, 如果不为 null, 则返回 map.size()
     */
    public static int length(
            final Map map,
            final int defaultLength
    ) {
        return map != null ? map.size() : defaultLength;
    }

    // =

    /**
     * 获取长度 Map 是否等于期望长度
     * @param map    {@link Map}
     * @param length 期望长度
     * @return {@code true} yes, {@code false} no
     */
    public static boolean isLength(
            final Map map,
            final int length
    ) {
        return map != null && map.size() == length;
    }

    // =

    /**
     * 判断 Map 长度是否大于指定长度
     * @param map    {@link Map}
     * @param length 指定长度
     * @return {@code true} yes, {@code false} no
     */
    public static boolean greaterThan(
            final Map map,
            final int length
    ) {
        return map != null && map.size() > length;
    }

    /**
     * 判断 Map 长度是否大于等于指定长度
     * @param map    {@link Map}
     * @param length 指定长度
     * @return {@code true} yes, {@code false} no
     */
    public static boolean greaterThanOrEqual(
            final Map map,
            final int length
    ) {
        return map != null && map.size() >= length;
    }

    // =

    /**
     * 判断 Map 长度是否小于指定长度
     * @param map    {@link Map}
     * @param length 指定长度
     * @return {@code true} yes, {@code false} no
     */
    public static boolean lessThan(
            final Map map,
            final int length
    ) {
        return map != null && map.size() < length;
    }

    /**
     * 判断 Map 长度是否小于等于指定长度
     * @param map    {@link Map}
     * @param length 指定长度
     * @return {@code true} yes, {@code false} no
     */
    public static boolean lessThanOrEqual(
            final Map map,
            final int length
    ) {
        return map != null && map.size() <= length;
    }

    // =============
    // = 获取长度总和 =
    // =============

    /**
     * 获取 Map 数组长度总和
     * @param maps Map[]
     * @return Map 数组长度总和
     */
    public static int getCount(final Map... maps) {
        if (maps == null) return 0;
        int count = 0;
        for (Map map : maps) {
            count += length(map);
        }
        return count;
    }

    // ==========
    // = 数据获取 =
    // ==========

    /**
     * 获取 value
     * @param map {@link Map}
     * @param key key
     * @param  key
     * @param  value
     * @return 指定 key 的 value
     */
    public static  V get(
            final Map map,
            final K key
    ) {
        if (map != null) {
            try {
                return map.get(key);
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "get");
            }
        }
        return null;
    }

    /**
     * 获取 value 如果 value 为 null, 则返回 defaultValue
     * @param map          {@link Map}
     * @param key          key
     * @param defaultValue 默认 value
     * @param           key
     * @param           value
     * @return 指定 key 的 value 如果 value 为 null, 则返回 defaultValue
     */
    public static  V get(
            final Map map,
            final K key,
            final V defaultValue
    ) {
        if (map != null) {
            try {
                V value = map.get(key);
                if (value == null) {
                    return defaultValue;
                } else {
                    return value;
                }
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "get");
            }
        }
        return null;
    }

    /**
     * 通过 value 获取 key
     * @param map   {@link Map}
     * @param value Value
     * @param    key
     * @param    value
     * @return 等于 value 的 key
     */
    public static  K getKeyByValue(
            final Map map,
            final V value
    ) {
        if (map != null) {
            try {
                for (Map.Entry entry : map.entrySet()) {
                    V v = entry.getValue();
                    if (equals(v, value)) {
                        return entry.getKey();
                    }
                }
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "getKeyByValue");
            }
        }
        return null;
    }

    /**
     * 通过 value 获取 key 集合 ( 返回等于 value 的 key 集合 )
     * @param map   {@link Map}
     * @param value Value
     * @param    key
     * @param    value
     * @return 等于 value 的 key 集合
     */
    public static  List getKeysByValue(
            final Map map,
            final V value
    ) {
        if (map != null) {
            try {
                List lists = new ArrayList<>();
                for (Map.Entry entry : map.entrySet()) {
                    V v = entry.getValue();
                    if (equals(v, value)) {
                        lists.add(entry.getKey());
                    }
                }
                return lists;
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "getKeysByValue");
            }
        }
        return null;
    }

    // =

    /**
     * 通过 Map 获取 key 集合
     * @param map {@link Map}
     * @param  key
     * @param  value
     * @return 全部存储 key 集合
     */
    public static  List getKeys(final Map map) {
        if (map != null) {
            try {
                return new ArrayList<>(map.keySet());
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "getKeys");
            }
        }
        return null;
    }

    /**
     * 通过 Map 获取 key 数组
     * @param map {@link Map}
     * @param  key
     * @param  value
     * @return 全部存储 key 数组
     */
    public static  K[] getKeysToArrays(final Map map) {
        if (map != null) {
            try {
                return CollectionUtils.toArrayT(getKeys(map));
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "getKeysToArrays");
            }
        }
        return null;
    }

    /**
     * 通过 Map 获取 value 集合
     * @param map {@link Map}
     * @param  key
     * @param  value
     * @return 全部存储 value 数组
     */
    public static  List getValues(final Map map) {
        if (map != null) {
            try {
                return new ArrayList<>(map.values());
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "getValues");
            }
        }
        return null;
    }

    /**
     * 通过 Map 获取 value 数组
     * @param map {@link Map}
     * @param  key
     * @param  value
     * @return 全部存储 value 数组
     */
    public static  V[] getValuesToArrays(final Map map) {
        if (map != null) {
            try {
                return CollectionUtils.toArrayT(getValues(map));
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "getValuesToArrays");
            }
        }
        return null;
    }

    // =

    /**
     * 获取第一条数据
     * @param map {@link Map}
     * @param  key
     * @param  value
     * @return 第一条数据 {@link Map.Entry}
     */
    public static  Map.Entry getFirst(final LinkedHashMap map) {
        if (map != null) {
            try {
                return map.entrySet().iterator().next();
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "getFirst");
            }
        }
        return null;
    }

    /**
     * 获取最后一条数据
     * @param map {@link Map}
     * @param  key
     * @param  value
     * @return 最后一条数据 {@link Map.Entry}
     */
    public static  Map.Entry getLast(final LinkedHashMap map) {
        return getLast(map, true);
    }

    /**
     * 获取最后一条数据
     * @param map          {@link Map}
     * @param isReflection 是否使用反射
     * @param           key
     * @param           value
     * @return 最后一条数据 {@link Map.Entry}
     */
    public static  Map.Entry getLast(
            final LinkedHashMap map,
            final boolean isReflection
    ) {
        if (map != null) {
            if (isReflection) {
                try {
                    // 反射方式
                    Field tail = map.getClass().getDeclaredField("tail");
                    tail.setAccessible(true);
                    return (Map.Entry) tail.get(map);
                } catch (Exception e) {
                    JCLogUtils.eTag(TAG, e, "getLast");
                }
            } else {
                try {
                    // 遍历方式
                    Iterator> iterator = map.entrySet().iterator();
                    Map.Entry           tail     = null;
                    while (iterator.hasNext()) {
                        tail = iterator.next();
                    }
                    return tail;
                } catch (Exception e) {
                    JCLogUtils.eTag(TAG, e, "getLast");
                }
            }
        }
        return null;
    }

    // =

    /**
     * 根据指定 key 获取 key 所在位置的下一条数据
     * @param map {@link Map}
     * @param key key
     * @param  key
     * @param  value
     * @return 指定 key 下一条数据 {@link Map.Entry}
     */
    public static  Map.Entry getNext(
            final LinkedHashMap map,
            final K key
    ) {
        if (map != null) {
            try {
                for (Map.Entry entry : map.entrySet()) {
                    K k = entry.getKey();
                    if (equals(k, key)) {
                        return entry;
                    }
                }
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "getNext");
            }
        }
        return null;
    }

    /**
     * 根据指定 key 获取 key 所在位置的上一条数据
     * @param map {@link Map}
     * @param key key
     * @param  key
     * @param  value
     * @return 指定 key 上一条数据 {@link Map.Entry}
     */
    public static  Map.Entry getPrevious(
            final LinkedHashMap map,
            final K key
    ) {
        if (map != null) {
            try {
                Iterator> iterator = map.entrySet().iterator();
                // 临时保存处理
                Map.Entry temp = null;
                // 循环处理
                while (iterator.hasNext()) {
                    Map.Entry entry = iterator.next();
                    K               k     = entry.getKey();
                    // 判断 key 是否相同
                    if (equals(k, key)) {
                        return temp;
                    }
                    // 赋值上一条数据
                    temp = entry;
                }
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "getPrevious");
            }
        }
        return null;
    }

    // ==========
    // = 添加数据 =
    // ==========

    /**
     * 添加一条数据
     * @param map   {@link Map}
     * @param key   key
     * @param value value
     * @param    key
     * @param    value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean put(
            final Map map,
            final K key,
            final V value
    ) {
        return put(map, key, value, false);
    }

    /**
     * 添加一条数据
     * @param map     {@link Map}
     * @param key     key
     * @param value   value
     * @param notNull 是否不允许 key 为 null
     * @param      key
     * @param      value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean put(
            final Map map,
            final K key,
            final V value,
            final boolean notNull
    ) {
        if (map != null) {
            if (notNull && key == null) {
                return false;
            }
            try {
                map.put(key, value);
                return true;
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "put");
            }
        }
        return false;
    }

    /**
     * 添加一条数据 ( 不允许 key 为 null )
     * @param map   {@link Map}
     * @param key   key
     * @param value value
     * @param    key
     * @param    value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean putNotNull(
            final Map map,
            final K key,
            final V value
    ) {
        return put(map, key, value, true);
    }

    // =

    /**
     * 添加一条数据
     * @param map   {@link Map}
     * @param entry entry
     * @param    key
     * @param    value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean put(
            final Map map,
            final Map.Entry entry
    ) {
        return put(map, entry, false);
    }

    /**
     * 添加一条数据
     * @param map     {@link Map}
     * @param entry   entry
     * @param notNull 是否不允许 key 为 null
     * @param      key
     * @param      value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean put(
            final Map map,
            final Map.Entry entry,
            final boolean notNull
    ) {
        if (map != null && entry != null) {
            if (notNull && entry.getKey() == null) {
                return false;
            }
            try {
                map.put(entry.getKey(), entry.getValue());
                return true;
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "put");
            }
        }
        return false;
    }

    /**
     * 添加一条数据 ( 不允许 key 为 null )
     * @param map   {@link Map}
     * @param entry entry
     * @param    key
     * @param    value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean putNotNull(
            final Map map,
            final Map.Entry entry
    ) {
        return put(map, entry, true);
    }

    // =

    /**
     * 添加多条数据
     * @param map        {@link Map}
     * @param listKeys   keys
     * @param listValues values
     * @param         key
     * @param         value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean putAll(
            final Map map,
            final List listKeys,
            final List listValues
    ) {
        return putAll(map, listKeys, listValues, false);
    }

    /**
     * 添加多条数据
     * @param map        {@link Map}
     * @param listKeys   keys
     * @param listValues values
     * @param notNull    是否不允许 key 为 null
     * @param         key
     * @param         value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean putAll(
            final Map map,
            final List listKeys,
            final List listValues,
            final boolean notNull
    ) {
        if (map != null && listKeys != null && listValues != null
                && listKeys.size() == listValues.size()) {
            try {
                // 循环保存
                for (int i = 0, len = listKeys.size(); i < len; i++) {
                    K key = listKeys.get(i);
                    if (notNull && key == null) {
                        continue; // 忽略进行下一个
                    }
                    // 添加数据
                    map.put(key, listValues.get(i));
                }
                return true;
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "putAll");
            }
        }
        return false;
    }

    /**
     * 添加多条数据, 不允许 key 为 null
     * @param map        {@link Map}
     * @param listKeys   keys
     * @param listValues values
     * @param         key
     * @param         value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean putAllNotNull(
            final Map map,
            final List listKeys,
            final List listValues
    ) {
        return putAll(map, listKeys, listValues, true);
    }

    // =

    /**
     * 添加多条数据
     * @param map    {@link Map}
     * @param keys   keys
     * @param values values
     * @param     key
     * @param     value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean putAll(
            final Map map,
            final K[] keys,
            final V[] values
    ) {
        return putAll(map, keys, values, false);
    }

    /**
     * 添加多条数据
     * @param map     {@link Map}
     * @param keys    keys
     * @param values  values
     * @param notNull 是否不允许 key 为 null
     * @param      key
     * @param      value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean putAll(
            final Map map,
            final K[] keys,
            final V[] values,
            final boolean notNull
    ) {
        if (map != null && keys != null && values != null && keys.length == values.length) {
            try {
                // 循环保存
                for (int i = 0, len = keys.length; i < len; i++) {
                    K key = keys[i];
                    if (notNull && key == null) {
                        continue; // 忽略进行下一个
                    }
                    // 添加数据
                    map.put(key, values[i]);
                }
                return true;
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "putAll");
            }
        }
        return false;
    }

    /**
     * 添加多条数据, 不允许 key 为 null
     * @param map    {@link Map}
     * @param keys   keys
     * @param values values
     * @param     key
     * @param     value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean putAllNotNull(
            final Map map,
            final K[] keys,
            final V[] values
    ) {
        return putAll(map, keys, values, true);
    }

    // =

    /**
     * 添加多条数据
     * @param map     {@link Map}
     * @param mapData map 数据
     * @param      key
     * @param      value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean putAll(
            final Map map,
            final Map mapData
    ) {
        return putAll(map, mapData, false);
    }

    /**
     * 添加多条数据
     * @param map     {@link Map}
     * @param mapData map 数据
     * @param notNull 是否不允许 key 为 null
     * @param      key
     * @param      value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean putAll(
            final Map map,
            final Map mapData,
            final boolean notNull
    ) {
        if (map != null && mapData != null) {
            if (notNull) {
                try {
                    for (Map.Entry entry : mapData.entrySet()) {
                        K key = entry.getKey();
                        if (key != null) {
                            map.put(key, entry.getValue());
                        }
                    }
                    return true;
                } catch (Exception e) {
                    JCLogUtils.eTag(TAG, e, "putAll");
                }
            } else {
                try {
                    map.putAll(mapData);
                    return true;
                } catch (Exception e) {
                    JCLogUtils.eTag(TAG, e, "putAll");
                }
            }
        }
        return false;
    }

    /**
     * 添加多条数据, 不允许 key 为 null
     * @param map     {@link Map}
     * @param mapData map 数据
     * @param      key
     * @param      value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean putAllNotNull(
            final Map map,
            final Map mapData
    ) {
        return putAll(map, mapData, true);
    }

    // ==========
    // = 删除数据 =
    // ==========

    /**
     * 移除一条数据
     * @param map {@link Map}
     * @param key key
     * @param  key
     * @param  value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean remove(
            final Map map,
            final K key
    ) {
        if (map != null) {
            try {
                map.remove(key);
                return true;
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "remove");
            }
        }
        return false;
    }

    /**
     * 移除一条数据
     * @param map   {@link Map}
     * @param key   key
     * @param value value
     * @param    key
     * @param    value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean remove(
            final Map map,
            final K key,
            final V value
    ) {
        if (map != null) {
            try {
                // 判断值是否一样, 一样则移除 key
                if (equals(value, map.get(key))) {
                    map.remove(key);
                }
                return true;
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "remove");
            }
        }
        return false;
    }

    /**
     * 移除多条数据
     * @param map  {@link Map}
     * @param keys keys
     * @param   key
     * @param   value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean removeToKeys(
            final Map map,
            final Collection keys
    ) {
        if (map != null && keys != null) {
            try {
                for (K key : keys) {
                    map.remove(key);
                }
                return true;
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "removeToKeys");
            }
        }
        return false;
    }

    /**
     * 移除等于 value 的所有数据
     * @param map   {@link Map}
     * @param value value
     * @param    key
     * @param    value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean removeToValue(
            final Map map,
            final V value
    ) {
        if (map != null) {
            try {
                Iterator> iterator = map.entrySet().iterator();
                while (iterator.hasNext()) {
                    Map.Entry entry = iterator.next();
                    V               v     = entry.getValue();
                    if (equals(v, value)) {
                        iterator.remove();
                    }
                }
                return true;
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "removeToValue");
            }
        }
        return false;
    }

    /**
     * 移除等于 value 的所有数据 ( Collection )
     * @param map    {@link Map}
     * @param values values
     * @param     key
     * @param     value
     * @return {@code true} success, {@code false} fail
     */
    public static  boolean removeToValues(
            final Map map,
            final Collection values
    ) {
        if (map != null && values != null) {
            try {
                for (V value : values) {
                    removeToValue(map, value);
                }
                return true;
            } catch (Exception e) {
                JCLogUtils.eTag(TAG, e, "removeToValues");
            }
        }
        return false;
    }

    // ==========
    // = 快捷方法 =
    // ==========

    /**
     * 判断两个值是否一样
     * @param value1 第一个值
     * @param value2 第二个值
     * @param     泛型
     * @return {@code true} yes, {@code false} no
     */
    public static  boolean equals(
            final T value1,
            final T value2
    ) {
        return ObjectUtils.equals(value1, value2);
    }

    // =

    /**
     * 切换保存状态
     * 
     *     1. 如果存在, 则删除
     *     2. 如果不存在, 则保存
     * 
* @param map {@link Map} * @param key key * @param value value * @param key * @param value * @return {@code true} success, {@code false} fail */ public static boolean toggle( final Map map, final K key, final V value ) { if (map != null) { // 判断是否存在 key boolean existKey = map.containsKey(key); try { if (existKey) { // 存在则删除 map.remove(key); } else { // 不存在则保存 map.put(key, value); } return true; } catch (Exception e) { JCLogUtils.eTag(TAG, e, "toggle"); } } return false; } /** * 判断指定 key 的 value 是否为 null * @param map {@link Map} * @param key key * @param key * @param value * @return {@code true} yes, {@code false} no */ public static boolean isNullToValue( final Map map, final K key ) { if (map != null) { return map.get(key) == null; } return true; } /** * 判断 Map 是否存储 key * @param map {@link Map} * @param key key * @param key * @param value * @return {@code true} yes, {@code false} no */ public static boolean containsKey( final Map map, final K key ) { if (map != null) { try { return map.containsKey(key); } catch (Exception e) { JCLogUtils.eTag(TAG, e, "containsKey"); } } return false; } /** * 判断 Map 是否存储 value * @param map {@link Map} * @param value value * @param key * @param value * @return {@code true} yes, {@code false} no */ public static boolean containsValue( final Map map, final V value ) { if (map != null) { try { return map.containsValue(value); } catch (Exception e) { JCLogUtils.eTag(TAG, e, "containsValue"); } } return false; } // =============== // = 特殊 Map 操作 = // =============== /** * 添加一条数据 * @param map 待添加 {@link Map} * @param key key * @param value value, add to list * @param key * @param value type * @return {@code true} success, {@code false} fail */ public static boolean putToList( final Map> map, final K key, final T value ) { return putToList(map, key, value, true); } /** * 添加一条数据 * @param map {@link Map} * @param key key * @param value value, add to list * @param isNew 当指定 (key) 的 value 为 null, 是否创建 * @param key * @param value type * @return {@code true} success, {@code false} fail */ public static boolean putToList( final Map> map, final K key, final T value, final boolean isNew ) { if (map != null) { if (map.containsKey(key)) { List lists = map.get(key); if (lists != null) { try { lists.add(value); map.put(key, lists); return true; } catch (Exception e) { JCLogUtils.eTag(TAG, e, "putToList"); } } } else { // 判断是否创建 if (isNew) { try { List lists = new ArrayList<>(); lists.add(value); map.put(key, lists); return true; } catch (Exception e) { JCLogUtils.eTag(TAG, e, "putToList"); } } } } return false; } // = /** * 移除一条数据 * @param map {@link Map} * @param key key * @param key * @param value type * @return {@code true} success, {@code false} fail */ public static boolean removeToList( final Map> map, final K key ) { if (map != null) { try { map.remove(key); return true; } catch (Exception e) { JCLogUtils.eTag(TAG, e, "removeToList"); } } return false; } /** * 移除一条数据 * @param map {@link Map} * @param key key * @param value value, remove to list * @param key * @param value type * @return {@code true} success, {@code false} fail */ public static boolean removeToList( final Map> map, final K key, final T value ) { if (map != null) { if (map.containsKey(key)) { List lists = map.get(key); if (lists != null) { try { lists.remove(value); return true; } catch (Exception e) { JCLogUtils.eTag(TAG, e, "removeToList"); } } } } return false; } /** * 移除多条数据 * @param map {@link Map} * @param key key * @param lists 删除的 list 数据源 * @param key * @param value type * @return {@code true} success, {@code false} fail */ public static boolean removeToLists( final Map> map, final K key, final List lists ) { if (map != null && lists != null) { if (map.containsKey(key)) { List list = map.get(key); if (list != null) { try { list.removeAll(lists); return true; } catch (Exception e) { JCLogUtils.eTag(TAG, e, "removeToLists"); } } } } return false; } // = /** * 移除多条数据 ( 通过 Map 进行移除 ) * @param map {@link Map} * @param removeMap {@link Map} 移除对比数据源 * @param key * @param value type * @return {@code true} success, {@code false} fail */ public static boolean removeToMap( final Map> map, final Map> removeMap ) { return removeToMap(map, removeMap, true, false); } /** * 移除多条数据 ( 通过 Map 进行移除 ) * @param map {@link Map} * @param removeMap {@link Map} 移除对比数据源 * @param removeEmpty 是否移除 null、长度为 0 的数据 * @param isNullRemoveAll 如果待移除的 List 是 null, 是否移除全部 * @param key * @param value type * @return {@code true} success, {@code false} fail */ public static boolean removeToMap( final Map> map, final Map> removeMap, final boolean removeEmpty, final boolean isNullRemoveAll ) { if (map != null && removeMap != null) { for (Map.Entry> entry : removeMap.entrySet()) { K key = entry.getKey(); // 进行移除处理 if (map.containsKey(key)) { List value = entry.getValue(); try { if (value != null) { map.get(key).removeAll(value); } else { if (isNullRemoveAll) { map.remove(key); } } } catch (Exception e) { JCLogUtils.eTag(TAG, e, "removeToMap - removeAll"); } // 判断是否移除 null、长度为 0 的数据 if (removeEmpty) { List lists = map.get(key); try { // 不存在数据了, 则移除 if (lists == null || lists.size() == 0) { map.remove(key); } } catch (Exception e) { JCLogUtils.eTag(TAG, e, "removeToMap"); } } } } return true; } return false; } // ========== // = 拼接处理 = // ========== /** * 键值对拼接 * @param map {@link Map} * @param symbol 拼接符号 * @param key * @param value * @return {@link StringBuilder} */ public static StringBuilder mapToString( final Map map, final String symbol ) { return mapToString(map, symbol, new StringBuilder()); } /** * 键值对拼接 * @param map {@link Map} * @param symbol 拼接符号 * @param builder Builder * @param key * @param value * @return {@link StringBuilder} */ public static StringBuilder mapToString( final Map map, final String symbol, final StringBuilder builder ) { if (map != null && builder != null) { Iterator> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); builder.append(ConvertUtils.toString(entry.getKey())); builder.append(symbol); builder.append(ConvertUtils.toString(entry.getValue())); // 如果还有下一行则追加换行 if (iterator.hasNext()) { builder.append(DevFinal.SYMBOL.NEW_LINE); } } } return builder; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy