cn.opencodes.framework.tools.utils.MapUtils Maven / Gradle / Ivy
package cn.opencodes.framework.tools.utils;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Map取值方法,其中取得多种值,避免null值转换
* @author HJ
*/
public class MapUtils extends org.apache.commons.collections.MapUtils{
/**
* 默认初始大小
*/
public static final int DEFAULT_INITIAL_CAPACITY = 16;
/**
* 默认增长因子,当Map的size达到 容量*增长因子时,开始扩充Map
*/
public static final float DEFAULT_LOAD_FACTOR = 0.75f;
/**
* 映射键值(参考Python的zip()函数)
* 例如:
* keys = [a,b,c,d]
* values = [1,2,3,4]
* 则得到的Map是 {a=1, b=2, c=3, d=4}
* 如果两个数组长度不同,则只对应最短部分
*
* @param Key类型
* @param Value类型
* @param keys 键列表
* @param values 值列表
* @param isOrder 是否有序
* @return Map
*/
public static Map zip(K[] keys, V[] values, boolean isOrder) {
if (ArrayUtils.isEmpty(keys) || ArrayUtils.isEmpty(values)) {
return null;
}
final int size = Math.min(keys.length, values.length);
final Map map = newHashMap(size, isOrder);
for (int i = 0; i < size; i++) {
map.put(keys[i], values[i]);
}
return map;
}
/**
* 映射键值(参考Python的zip()函数)
* 例如:
* keys = a,b,c,d
* values = 1,2,3,4
* delimiter = , 则得到的Map是 {a=1, b=2, c=3, d=4}
* 如果两个数组长度不同,则只对应最短部分
*
* @param keys 键列表
* @param values 值列表
* @param delimiter 分隔符
* @param isOrder 是否有序
* @return Map
*/
public static Map zip(String keys, String values, String delimiter, boolean isOrder) {
return zip(StringUtils.split(keys, delimiter), StringUtils.split(values, delimiter), isOrder);
}
/**
* 新建一个HashMap
* @param Key类型
* @param Value类型
* @param size 初始大小,由于默认负载因子0.75,传入的size会实际初始大小为size / 0.75 + 1
* @param isOrder Map的Key是否有序,有序返回 {@link LinkedHashMap},否则返回 {@link HashMap}
* @return HashMap对象
*/
public static HashMap newHashMap(int size, boolean isOrder) {
int initialCapacity = (int) (size / DEFAULT_LOAD_FACTOR) + 1;
return isOrder ? new LinkedHashMap<>(initialCapacity) : new HashMap<>(initialCapacity);
}
/**
* 新建一个HashMap
* @param Key类型
* @param Value类型
* @param size 初始大小,由于默认负载因子0.75,传入的size会实际初始大小为size / 0.75 + 1
* @return HashMap对象
*/
public static HashMap newHashMap(int size) {
return newHashMap(size, false);
}
/**
* 新建一个HashMap
* @param Key类型
* @param Value类型
* @param isOrder Map的Key是否有序,有序返回 {@link LinkedHashMap},否则返回 {@link HashMap}
* @return HashMap对象
*/
public static HashMap newHashMap(boolean isOrder) {
return newHashMap(DEFAULT_INITIAL_CAPACITY, isOrder);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy