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

me.aifaq.commons.lang.MapUtil Maven / Gradle / Ivy

The newest version!
package me.aifaq.commons.lang;

import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.MapUtils;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author Wang Wei [[email protected]]
 * @since 10:45 2017/5/26
 */
public class MapUtil {
    public static  Map newHashMap(K key, V value) {
        final Map map = Maps.newHashMap();
        map.put(key, value);
        return map;
    }

    public static  Map newLinkedHashMap(K key, V value) {
        final Map map = Maps.newLinkedHashMap();
        map.put(key, value);
        return map;
    }

    /**
     * 根据key获取value,
     * 如果value非null,则直接返回value,
     * 如果value为null,则调用{@link Callable#call()}生成value,再通过{@link Map#put(Object, Object)}把新value放到map中并返回
     *
     * @param map
     * @param key
     * @param callable
     * @param 
     * @param 
     * @return
     */
    public static  V getIfNullPut(Map map, K key, Callable callable) {
        Preconditions.checkNotNull(map);

        V value = map.get(key);
        if (value != null) {
            return value;
        }

        try {
            value = callable.call();
        } catch (Exception e) {
            throw ExceptionUtil.wrapToRuntimeException(e);
        }
        if (value != null) {
            map.put(key, value);
        }

        return value;
    }

    /**
     * 根据key获取value,
     * 如果value非null,则直接返回value,
     * 如果value为null,则调用{@link Callable#call()}生成value,再通过{@link ConcurrentHashMap#putIfAbsent(Object, Object)}把新value放到map中并返回
     *
     * @param map
     * @param key
     * @param callable
     * @param 
     * @param 
     * @return
     */
    public static  V getIfNullPutIfAbsent(ConcurrentHashMap map, K key,
                                                Callable callable) {
        Preconditions.checkNotNull(map);

        V value = map.get(key);
        if (value != null) {
            return value;
        }

        try {
            value = callable.call();
        } catch (Exception e) {
            throw ExceptionUtil.wrapToRuntimeException(e);
        }
        if (value != null) {
            V oldValue = map.putIfAbsent(key, value);
            if (oldValue != null) {
                return oldValue;
            }
        }

        return value;
    }

    /**
     * 创建 {@link java.util.Map.Entry} 对象
     *
     * @param k
     * @param v
     * @param 
     * @param 
     * @return
     */
    public static  Map.Entry newMapEntry(K k, V v) {
        return new DefaultMapEntry(k, v);
    }

    static class DefaultMapEntry implements Map.Entry {

        private final K key;
        private V value;

        public DefaultMapEntry(K key, V value) {
            this.key = key;
            this.value = value;
        }

        @Override
        public K getKey() {
            return key;
        }

        @Override
        public V getValue() {
            return value;
        }

        @Override
        public V setValue(V value) {
            return this.value = value;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (o == null || getClass() != o.getClass()) {
                return false;
            }

            DefaultMapEntry that = (DefaultMapEntry) o;

            if (key != null ? !key.equals(that.key) : that.key != null) {
                return false;
            }
            return value != null ? value.equals(that.value) : that.value == null;
        }

        @Override
        public int hashCode() {
            int result = key != null ? key.hashCode() : 0;
            result = 31 * result + (value != null ? value.hashCode() : 0);
            return result;
        }
    }

    public static  V get(Map map, K key) {
        return (V) MapUtils.getObject(map, key);
    }

    public static  V get(Map map, K key, V defaultValue) {
        return (V) MapUtils.getObject(map, key, defaultValue);
    }

    /**
     * 创建{@link HashMap}对象,初始容量为0
     *
     * @param 
     * @return
     */
    public static  HashMap newEmptyHashMap() {
        return new HashMap<>(0);
    }

    public static Integer getAsInteger(Map sourceMap, String fileName) {
        final Object value = MapUtils.getObject(sourceMap, fileName);

        return NumberUtil.toInteger(value);
    }

    public static Long getAsLong(Map sourceMap, String fileName) {
        final Object value = MapUtils.getObject(sourceMap, fileName);

        return NumberUtil.toLong(value);
    }

    public static String getAsString(Map sourceMap, String fileName) {
        final Object value = MapUtils.getObject(sourceMap, fileName);
        if (value == null) {
            return null;
        }
        if (value instanceof String) {
            return (String) value;
        }

        return String.valueOf(value);
    }

    public static Date getAsDate(Map sourceMap, String fileName) {
        final Object value = MapUtils.getObject(sourceMap, fileName);
        if (value == null) {
            return null;
        }
        if (value instanceof Date) {
            return (Date) value;
        }
        if (value instanceof Calendar) {
            return ((Calendar) value).getTime();
        }
        if (value instanceof Number) {
            return new Date(((Number) value).longValue());
        }

        return DateUtil.parse(String.valueOf(value));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy