Package org.aoju.bus.core.toolkit
Class MapKit
java.lang.Object
org.aoju.bus.core.toolkit.MapKit
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int默认初始大小static final float默认增长因子,当Map的size达到 容量*增长因子时,开始扩充Map -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <K,V> MapBuilder <K, V> builder()创建链接调用mapstatic <K,V> MapBuilder <K, V> 创建链接调用mapstatic <K,V> MapBuilder <K, V> builder(K k, V v) 创建链接调用mapstatic void清除一个或多个Map集合内的元素,每个Map调用clear()方法static <K,V> V computeIfAbsent(Map<K, V> map, K key, Function<? super K, ? extends V> mappingFunction) 如果 key 对应的 value 不存在,则使用获取 mappingFunction 重新计算后的值,并保存为该 key 的 value,否则返回 value。static <K,V> Map <K, V> static MapProxycreateProxy(Map<?, ?> map) 创建代理MapMapProxy对Map做一次包装,提供各种getXXX方法static <K,V> Map <K, V> edit(Map<K, V> map, UnaryOperator<Map.Entry<K, V>> editor) 编辑Map 编辑过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:static <K,V> Map <K, V> empty()返回一个空Mapstatic <K,V, T extends Map<K, V>>
T根据传入的Map类型不同,返回对应类型的空Mapstatic <K,V> Map.Entry <K, V> entry(K key, V value) 将键和值转换为AbstractMap.SimpleImmutableEntry返回的Entry不可变static <K,V> Map.Entry <K, V> entry(K key, V value, boolean isImmutable) static <K,V> Map <K, V> 过滤 过滤过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:static <K,V> Map <K, V> 过滤Map保留指定键值对,如果键不存在跳过static <T> T获取Map指定key的值,并转换为指定类型static <T> T获取Map指定key的值,并转换为指定类型static <T> T获取Map指定key的值,并转换为指定类型static <T> T获取Map指定key的值,并转换为指定类型static <K,V> Map <K, V> 获取Map的部分key生成新的Mapstatic Boolean获取Map指定key的值,并转换为Boolstatic Boolean获取Map指定key的值,并转换为Boolstatic Character获取Map指定key的值,并转换为Characterstatic Character获取Map指定key的值,并转换为Characterstatic Date获取Map指定key的值,并转换为Datestatic Date获取Map指定key的值,并转换为Datestatic Double获取Map指定key的值,并转换为Doublestatic Double获取Map指定key的值,并转换为Doublestatic Float获取Map指定key的值,并转换为Floatstatic Float获取Map指定key的值,并转换为Floatstatic Integer获取Map指定key的值,并转换为Integerstatic Integer获取Map指定key的值,并转换为Integerstatic Long获取Map指定key的值,并转换为Longstatic Long获取Map指定key的值,并转换为Longstatic <T> TgetQuietly(Map<?, ?> map, Object key, Class<T> type, T defaultValue) 获取Map指定key的值,并转换为指定类型,此方法在转换失败后不抛异常,返回null。static <T> TgetQuietly(Map<?, ?> map, Object key, Types<T> type, T defaultValue) 获取Map指定key的值,并转换为指定类型,转换失败后返回null,不抛异常static Short获取Map指定key的值,并转换为Shortstatic Short获取Map指定key的值,并转换为Shortstatic String获取Map指定key的值,并转换为字符串static String获取Map指定key的值,并转换为字符串根据给定的entry列表,根据entry的key进行分组;static <K,V> Map <V, K> Map的键和值互换 互换键值对不检查值是否有重复,如果有则后加入的元素替换先加入的元素 值的顺序在HashMap中不确定,所以谁覆盖谁也不确定,在有序的Map中按照先后顺序覆盖,保留最后的值static booleanMap是否为空static booleanisNotEmpty(Map<?, ?> map) Map是否为非空static <K,V> String join(Map<K, V> map, String separator, String keyValueSeparator, boolean isIgnoreNull, String... otherParams) 将map转成字符串static <K,V> String 将map转成字符串static <K,V> String join(Map<K, V> map, String separator, String keyValueSeparator, Predicate<Map.Entry<K, V>> predicate, String... otherParams) 将map转成字符串static <K,V> String joinIgnoreNull(Map<K, V> map, String separator, String keyValueSeparator, String... otherParams) 将map转成字符串,忽略null的键和值static <K,V, R> Map <K, R> map(Map<K, V> map, BiFunction<K, V, R> biFunction) 通过biFunction自定义一个规则,此规则将原Map中的元素转换成新的元素,生成新的Map返回 变更过程通过传入的BiFunction实现来返回一个值可以为不同类型的Mapstatic <K,V> HashMap <K, V> 新建一个HashMapstatic <K,V> HashMap <K, V> newHashMap(boolean isLinked) 新建一个HashMapstatic <K,V> HashMap <K, V> newHashMap(int size) 新建一个HashMapstatic <K,V> HashMap <K, V> newHashMap(int size, boolean isLinked) 新建一个HashMapstatic <K,V> Map <K, V> newIdentityMap(int size) 创建键不重复Mapstatic <K,V> ConcurrentHashMap <K, V> 新建一个初始容量为DEFAULT_INITIAL_CAPACITY的SafeHashMapstatic <K,V> ConcurrentHashMap <K, V> newSafeHashMap(int size) 新建一个SafeHashMapstatic <K,V> ConcurrentHashMap <K, V> newSafeHashMap(Map<K, V> map) 传入一个Map将其转化为SafeHashMap类型static <K,V> TreeMap <K, V> newTreeMap(Comparator<? super K> comparator) 新建TreeMap,Key有序的Mapstatic <K,V> TreeMap <K, V> newTreeMap(Map<K, V> map, Comparator<? super K> comparator) 新建TreeMap,Key有序的Mapstatic <K,V> HashMap <K, V> 将Entry集合转换为HashMap将数组转换为Map(HashMap),支持数组元素类型为:static <K,V> HashMap <K, V> 将Entry集合转换为HashMapstatic <K,V> Map <K, V> 根据给定的Pair数组创建Map对象static <K,V> HashMap <K, V> of(K key, V value) 将单一键值对转换为Mapstatic <K,V> HashMap <K, V> of(K key, V value, boolean isOrder) 将单一键值对转换为Mapstatic <T,K, V> Map <K, V> putAll(Map<K, V> resultMap, Iterable<T> iterable, Function<T, K> keyMapper, Function<T, V> valueMapper) 将列表按照给定的键生成器规则和值生成器规则,加入到给定的Map中static <K,V> Map <K, V> 将列表按照给定的键生成器规则和值生成器规则,加入到给定的Map中static <T,K, V> Map <K, V> putAll(Map<K, V> resultMap, Iterator<T> iterator, Function<T, K> keyMapper, Function<T, V> valueMapper) 将列表按照给定的键生成器规则和值生成器规则,加入到给定的Map中static <K,V> Map <K, V> 将列表按照给定的键生成器规则和值生成器规则,加入到给定的Map中static <K,V> Map <K, V> 去掉Map中指定key的键值对,修改原Mapstatic <K,V> Map <K, V> removeNullValue(Map<K, V> map) 去除Map中值为null的键值对 注意:此方法在传入的Map上直接修改。static <K,V> Map <K, V> 重命名键 实现方式为一处然后重新put,当旧的key不存在直接返回 当新的key存在,抛出IllegalArgumentException异常static <T> Map<T, T> Map的键和值互换 互换键值对不检查值是否有重复,如果有则后加入的元素替换先加入的元素 值的顺序在HashMap中不确定,所以谁覆盖谁也不确定,在有序的Map中按照先后顺序覆盖,保留最后的值static <K,V> TreeMap <K, V> 排序已有Map,Key有序的Map,使用默认Key排序方式(字母顺序)static <K,V extends Comparable<? super V>>
Map<K, V> 按照值排序,可选是否倒序static <K,V> TreeMap <K, V> sort(Map<K, V> map, Comparator<? super K> comparator) 排序已有Map,Key有序的Mapstatic StringsortJoin(Map<?, ?> params, String separator, String keyValueSeparator, boolean isIgnoreNull, String... otherParams) 根据参数排序后拼接为字符串,常用于签名static <K,V> Map <K, V> toCamelCaseMap(Map<K, V> map) 将已知Map转换为key为驼峰风格的Map 如果KEY为非String类型,保留原值行转列,合并相同的键,值合并为列表 将Map列表中相同key的值组成列表做为Map的value 是toMapList(Map)的逆方法 比如传入数据:列转行 将Map中值列表分别按照其位置与key组成新的map 是toListMap(Iterable)的逆方法 比如传入数据:static Object[][]toObjectArray(Map<?, ?> map) 将键值对转换为二维数组,第一维是key,第二纬是valuestatic <K,V> ArrayList <V> valuesOfKeys(Map<K, V> map, Iterable<K> keys) 从Map中获取指定键列表对应的值列表 如果key在map中不存在或key对应值为null,则返回值列表对应位置的值也为nullstatic <K,V> ArrayList <V> valuesOfKeys(Map<K, V> map, Iterator<K> keys) 从Map中获取指定键列表对应的值列表 如果key在map中不存在或key对应值为null,则返回值列表对应位置的值也为nullstatic <K,V> ArrayList <V> valuesOfKeys(Map<K, V> map, K... keys) 从Map中获取指定键列表对应的值列表 如果key在map中不存在或key对应值为null,则返回值列表对应位置的值也为nullstatic <K,V> Map <K, V> 将对应Map转换为不可修改的Mapstatic <K,V> MapWrapper <K, V> 创建Map包装类MapWrapperMapWrapper对Map做一次包装static <K,V> Map <K, V> zero()返回一个初始大小为0的HashMap(初始为0,可加入元素)
-
Field Details
-
DEFAULT_INITIAL_CAPACITY
public static final int DEFAULT_INITIAL_CAPACITY默认初始大小- See Also:
-
DEFAULT_LOAD_FACTOR
public static final float DEFAULT_LOAD_FACTOR默认增长因子,当Map的size达到 容量*增长因子时,开始扩充Map- See Also:
-
-
Constructor Details
-
MapKit
public MapKit()
-
-
Method Details
-
isEmpty
-
isNotEmpty
-
newHashMap
新建一个HashMap- Type Parameters:
K- Key类型V- Value类型- Returns:
- HashMap对象
-
newHashMap
新建一个HashMap- Type Parameters:
K- Key类型V- Value类型- Parameters:
size- 初始大小,由于默认负载因子0.75,传入的size会实际初始大小为size / 0.75 + 1- Returns:
- HashMap对象
-
newHashMap
新建一个HashMap- Type Parameters:
K- Key类型V- Value类型- Parameters:
size- 初始大小,由于默认负载因子0.75,传入的size会实际初始大小为size / 0.75 + 1isLinked- Map的Key是否有序,有序返回LinkedHashMap,否则返回HashMap- Returns:
- HashMap对象
-
newHashMap
新建一个HashMap- Type Parameters:
K- Key类型V- Value类型- Parameters:
isLinked- Map的Key是否有序,有序返回LinkedHashMap,否则返回HashMap- Returns:
- HashMap对象
-
newTreeMap
新建TreeMap,Key有序的Map- Type Parameters:
K- key的类型V- value的类型- Parameters:
comparator- Key比较器- Returns:
- TreeMap
-
newTreeMap
新建TreeMap,Key有序的Map- Type Parameters:
K- key的类型V- value的类型- Parameters:
map- Mapcomparator- Key比较器- Returns:
- TreeMap
-
newSafeHashMap
新建一个初始容量为DEFAULT_INITIAL_CAPACITY的SafeHashMap- Type Parameters:
K- key的类型V- value的类型- Returns:
SafeHashMap
-
newIdentityMap
创建键不重复Map- Type Parameters:
K- key的类型V- value的类型- Parameters:
size- 初始容量- Returns:
IdentityHashMap
-
newSafeHashMap
新建一个SafeHashMap- Type Parameters:
K- key的类型V- value的类型- Parameters:
size- 初始容量,当传入的容量小于等于0时,容量为DEFAULT_INITIAL_CAPACITY- Returns:
SafeHashMap
-
newSafeHashMap
传入一个Map将其转化为SafeHashMap类型- Type Parameters:
K- key的类型V- value的类型- Parameters:
map- map- Returns:
SafeHashMap
-
createMap
-
of
-
of
-
of
-
of
-
of
-
of
将数组转换为Map(HashMap),支持数组元素类型为:Map.Entry 长度大于1的数组(取前两个值),如果不满足跳过此元素 Iterable 长度也必须大于1(取前两个值),如果不满足跳过此元素 Iterator 长度也必须大于1(取前两个值),如果不满足跳过此元素
Map<Object, Object> colorMap = MapKit.of(new String[][] {{ {"RED", "#FF0000"}, {"GREEN", "#00FF00"}, {"BLUE", "#0000FF"}});参考:commons-lang
- Parameters:
array- 数组 元素类型为Map.Entry、数组、Iterable、Iterator- Returns:
HashMap
-
toListMap
行转列,合并相同的键,值合并为列表 将Map列表中相同key的值组成列表做为Map的value 是toMapList(Map)的逆方法 比如传入数据:[ {a: 1, b: 1, c: 1} {a: 2, b: 2} {a: 3, b: 3} {a: 4} ]结果是:
{ a: [1,2,3,4] b: [1,2,3,] c: [1] }- Type Parameters:
K- 键类型V- 值类型- Parameters:
mapList- Map列表- Returns:
- Map
-
toMapList
列转行 将Map中值列表分别按照其位置与key组成新的map 是toListMap(Iterable)的逆方法 比如传入数据:{ a: [1,2,3,4] b: [1,2,3,] c: [1] }结果是:
[ {a: 1, b: 1, c: 1} {a: 2, b: 2} {a: 3, b: 3} {a: 4} ]- Type Parameters:
K- 键类型V- 值类型- Parameters:
listMap- 列表Map- Returns:
- Map列表
-
toCamelCaseMap
-
toObjectArray
-
join
-
sortJoin
public static String sortJoin(Map<?, ?> params, String separator, String keyValueSeparator, boolean isIgnoreNull, String... otherParams) 根据参数排序后拼接为字符串,常用于签名- Parameters:
params- 参数separator- entry之间的连接符keyValueSeparator- kv之间的连接符isIgnoreNull- 是否忽略null的键和值otherParams- 其它附加参数字符串(例如密钥)- Returns:
- 签名字符串
-
joinIgnoreNull
-
join
public static <K,V> String join(Map<K, V> map, String separator, String keyValueSeparator, boolean isIgnoreNull, String... otherParams) 将map转成字符串- Type Parameters:
K- 键类型V- 值类型- Parameters:
map- Map,为空返回otherParams拼接separator- entry之间的连接符keyValueSeparator- kv之间的连接符isIgnoreNull- 是否忽略null的键和值otherParams- 其它附加参数字符串(例如密钥)- Returns:
- 连接后的字符串,map和otherParams为空返回""
-
join
public static <K,V> String join(Map<K, V> map, String separator, String keyValueSeparator, Predicate<Map.Entry<K, V>> predicate, String... otherParams) 将map转成字符串- Type Parameters:
K- 键类型V- 值类型- Parameters:
map- Map,为空返回otherParams拼接separator- entry之间的连接符keyValueSeparator- kv之间的连接符predicate- 键值对过滤otherParams- 其它附加参数字符串(例如密钥)- Returns:
- 连接后的字符串,map和otherParams为空返回""
-
edit
编辑Map 编辑过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:1、过滤出需要的对象,如果返回
null表示这个元素对象抛弃 2、修改元素对象,返回集合中为修改后的对象- Type Parameters:
K- Key类型V- Value类型- Parameters:
map- Mapeditor- 编辑器接口- Returns:
- 编辑后的Map
-
filter
过滤 过滤过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:1、过滤出需要的对象,如果返回null表示这个元素对象抛弃 2、修改元素对象,返回集合中为修改后的对象
- Type Parameters:
K- Key类型V- Value类型- Parameters:
map- Mappredicate- 过滤器接口,Predicate.test(Object)为true保留,null返回原Map- Returns:
- 过滤后的Map
-
map
通过biFunction自定义一个规则,此规则将原Map中的元素转换成新的元素,生成新的Map返回 变更过程通过传入的BiFunction实现来返回一个值可以为不同类型的Map- Type Parameters:
K-key的类型V-value的类型R- 新的,修改后的value的类型- Parameters:
map- 原有的mapbiFunction-lambda,参数包含key,value,返回值会作为新的value- Returns:
- 值可以为不同类型的
Map
-
filter
-
reverse
-
inverse
-
sort
-
sort
按照值排序,可选是否倒序- Type Parameters:
K- 键类型V- 值类型- Parameters:
map- 需要对值排序的mapisDesc- 是否倒序- Returns:
- 排序后新的Map
-
sort
排序已有Map,Key有序的Map- Type Parameters:
K- key的类型V- value的类型- Parameters:
map- Map,为null返回nullcomparator- Key比较器- Returns:
- TreeMap,map为null返回null
- See Also:
-
createProxy
-
wrap
创建Map包装类MapWrapperMapWrapper对Map做一次包装- Type Parameters:
K- key的类型V- value的类型- Parameters:
map- 被代理的Map- Returns:
MapWrapper
-
view
-
builder
创建链接调用map- Type Parameters:
K- Key类型V- Value类型- Returns:
- map创建类
-
builder
创建链接调用map- Type Parameters:
K- Key类型V- Value类型- Parameters:
map- 实际使用的map- Returns:
- map创建类
-
builder
创建链接调用map- Type Parameters:
K- Key类型V- Value类型- Parameters:
k- keyv- value- Returns:
- map创建类
-
getAny
-
removeAny
-
renameKey
重命名键 实现方式为一处然后重新put,当旧的key不存在直接返回 当新的key存在,抛出IllegalArgumentException异常- Type Parameters:
K- Key类型V- Value类型- Parameters:
map- MapoldKey- 原键newKey- 新键- Returns:
- map
-
removeNullValue
-
empty
返回一个空Map- Type Parameters:
K- 键类型V- 值类型- Returns:
- 空Map
- See Also:
-
zero
返回一个初始大小为0的HashMap(初始为0,可加入元素)- Type Parameters:
K- 键类型V- 值类型- Returns:
- 初始大小为0的HashMap
-
empty
-
clear
清除一个或多个Map集合内的元素,每个Map调用clear()方法- Parameters:
maps- 一个或多个Map
-
valuesOfKeys
-
valuesOfKeys
-
valuesOfKeys
-
entry
将键和值转换为AbstractMap.SimpleImmutableEntry返回的Entry不可变- Type Parameters:
K- 键类型V- 值类型- Parameters:
key- 键value- 值- Returns:
AbstractMap.SimpleImmutableEntry
-
entry
- Type Parameters:
K- 键类型V- 值类型- Parameters:
key- 键value- 值isImmutable- 是否不可变Entry- Returns:
AbstractMap.SimpleEntry或者AbstractMap.SimpleImmutableEntry
-
putAll
-
putAll
public static <T,K, Map<K,V> V> putAll(Map<K, V> resultMap, Iterable<T> iterable, Function<T, K> keyMapper, Function<T, V> valueMapper) 将列表按照给定的键生成器规则和值生成器规则,加入到给定的Map中- Type Parameters:
T- 列表值类型K- 键类型V- 值类型- Parameters:
resultMap- 结果Map,通过传入map对象决定结果的Map类型iterable- 值列表keyMapper- Map的键映射valueMapper- Map的值映射- Returns:
- HashMap
-
putAll
-
putAll
public static <T,K, Map<K,V> V> putAll(Map<K, V> resultMap, Iterator<T> iterator, Function<T, K> keyMapper, Function<T, V> valueMapper) 将列表按照给定的键生成器规则和值生成器规则,加入到给定的Map中- Type Parameters:
T- 列表值类型K- 键类型V- 值类型- Parameters:
resultMap- 结果Map,通过传入map对象决定结果的Map类型,如果为null,默认使用HashMapiterator- 值列表keyMapper- Map的键映射valueMapper- Map的值映射- Returns:
- HashMap
-
getString
-
getString
-
getInt
-
getInt
-
getDouble
-
getDouble
-
getFloat
-
getFloat
-
getShort
-
getShort
-
getBool
-
getBool
-
getChar
-
getChar
-
getLong
-
getLong
-
getDate
-
getDate
-
get
-
get
-
getQuietly
-
get
-
get
-
getQuietly
-
grouping
-
computeIfAbsent
public static <K,V> V computeIfAbsent(Map<K, V> map, K key, Function<? super K, ? extends V> mappingFunction) 如果 key 对应的 value 不存在,则使用获取 mappingFunction 重新计算后的值,并保存为该 key 的 value,否则返回 value。 方法来自Dubbo,解决使用ConcurrentHashMap.computeIfAbsent导致的死循环问题。(issues#2349) A temporary workaround for Java 8 specific performance issue JDK-8161372 . This class should be removed once we drop Java 8 support.- Type Parameters:
K- 键类型V- 值类型- Parameters:
map- Map,一般用于线程安全的Mapkey- 键mappingFunction- 值计算函数- Returns:
- 值
- See Also:
-