This commit is contained in:
Looly 2020-08-24 17:47:16 +08:00
parent 594c181367
commit a4e30936fb
3 changed files with 112 additions and 54 deletions

View File

@ -14,8 +14,9 @@
* 【core 】 增加PathUtil和FileNameUtil分离FileUtil中部分方法
* 【core 】 改造IndexedComparator增加InstanceComparator
* 【extra 】 增加CglibUtil
* 【extra 】 增加Ipv4Utilpr#161@Gitee
* 【extra 】 增加CalendarUtil和DateUtil增加isSameMonth方法pr#161@Gitee
* 【core 】 增加Ipv4Utilpr#161@Gitee
* 【core 】 增加CalendarUtil和DateUtil增加isSameMonth方法pr#161@Gitee
* 【core 】 Dict增加of方法issue#1035@Github
### Bug修复#
* 【poi 】 修复ExcelBase.isXlsx方法判断问题issue#I1S502@Gitee

View File

@ -17,9 +17,8 @@ import java.util.Map;
/**
* 字典对象扩充了HashMap中的方法
*
* @author loolly
*
* @author loolly
*/
public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGetter<String> {
private static final long serialVersionUID = 6135423866861206530L;
@ -27,13 +26,16 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
static final float DEFAULT_LOAD_FACTOR = 0.75f;
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
/** 是否大小写不敏感 */
/**
* 是否大小写不敏感
*/
private boolean caseInsensitive;
// --------------------------------------------------------------- Static method start
/**
* 创建Dict
*
*
* @return Dict
*/
public static Dict create() {
@ -42,17 +44,67 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 将PO对象转为Dict
*
* @param <T> Bean类型
*
* @param <T> Bean类型
* @param bean Bean对象
* @return Vo
*/
public static <T> Dict parse(T bean) {
return create().parseBean(bean);
}
/**
* 根据给定的Pair数组创建Dict对象
*
* @param pairs 键值对
* @return Dict
* @since 5.4.1
*/
@SafeVarargs
public static Dict of(Pair<String, Object>... pairs) {
final Dict dict = create();
for (Pair<String, Object> pair : pairs) {
dict.put(pair.getKey(), pair.getValue());
}
return dict;
}
/**
* 根据给定的键值对数组创建Dict对象传入参数必须为key,value,key,value...
*
* <p>奇数参数必须为keykey最后会转换为String类型</p>
* <p>奇数参数必须为value可以为任意类型</p>
*
* <pre>
Dict dict = Dict.of(
* "RED", "#FF0000",
* "GREEN", "#00FF00",
* "BLUE", "#0000FF"
* );
* </pre>
*
* @param keysAndValues 键值对列表必须奇数参数为key偶数参数为value
* @return Dict
* @since 5.4.1
*/
public static Dict of(Object... keysAndValues) {
final Dict dict = create();
String key = null;
for(int i = 0; i < keysAndValues.length; i++){
if(i % 2 == 0){
dict.put(key, keysAndValues[i]);
} else{
key = Convert.toStr(keysAndValues[i]);
}
}
return dict;
}
// --------------------------------------------------------------- Static method end
// --------------------------------------------------------------- Constructor start
/**
* 构造
*/
@ -62,7 +114,7 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 构造
*
*
* @param caseInsensitive 是否大小写不敏感
*/
public Dict(boolean caseInsensitive) {
@ -71,7 +123,7 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 构造
*
*
* @param initialCapacity 初始容量
*/
public Dict(int initialCapacity) {
@ -80,7 +132,7 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 构造
*
*
* @param initialCapacity 初始容量
* @param caseInsensitive 是否大小写不敏感
*/
@ -90,9 +142,9 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 构造
*
*
* @param initialCapacity 初始容量
* @param loadFactor 容量增长因子0~1即达到容量的百分之多少时扩容
* @param loadFactor 容量增长因子0~1即达到容量的百分之多少时扩容
*/
public Dict(int initialCapacity, float loadFactor) {
this(initialCapacity, loadFactor, false);
@ -100,9 +152,9 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 构造
*
*
* @param initialCapacity 初始容量
* @param loadFactor 容量增长因子0~1即达到容量的百分之多少时扩容
* @param loadFactor 容量增长因子0~1即达到容量的百分之多少时扩容
* @param caseInsensitive 是否大小写不敏感
* @since 4.5.16
*/
@ -113,7 +165,7 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 构造
*
*
* @param m Map
*/
public Dict(Map<String, Object> m) {
@ -123,8 +175,8 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 转换为Bean对象
*
* @param <T> Bean类型
*
* @param <T> Bean类型
* @param bean Bean
* @return Bean
*/
@ -134,8 +186,8 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 转换为Bean对象
*
* @param <T> Bean类型
*
* @param <T> Bean类型
* @param bean Bean
* @return Bean
* @since 3.3.1
@ -147,9 +199,9 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 转换为Bean对象
*
* @param <T> Bean类型
* @param bean Bean
*
* @param <T> Bean类型
* @param bean Bean
* @param isToCamelCase 是否转换为驼峰模式
* @return Bean
*/
@ -160,8 +212,8 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 转换为Bean对象,并使用驼峰法模式转换
*
* @param <T> Bean类型
*
* @param <T> Bean类型
* @param bean Bean
* @return Bean
*/
@ -172,8 +224,8 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 填充Value Object对象
*
* @param <T> Bean类型
*
* @param <T> Bean类型
* @param clazz Value Object或者POJO的类
* @return vo
*/
@ -183,8 +235,8 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 填充Value Object对象忽略大小写
*
* @param <T> Bean类型
*
* @param <T> Bean类型
* @param clazz Value Object或者POJO的类
* @return vo
*/
@ -195,8 +247,8 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 将值对象转换为Dict<br>
* 类名会被当作表名小写第一个字母
*
* @param <T> Bean类型
*
* @param <T> Bean类型
* @param bean 值对象
* @return 自己
*/
@ -209,11 +261,11 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 将值对象转换为Dict<br>
* 类名会被当作表名小写第一个字母
*
* @param <T> Bean类型
* @param bean 值对象
*
* @param <T> Bean类型
* @param bean 值对象
* @param isToUnderlineCase 是否转换为下划线模式
* @param ignoreNullValue 是否忽略值为空的字段
* @param ignoreNullValue 是否忽略值为空的字段
* @return 自己
*/
public <T> Dict parseBean(T bean, boolean isToUnderlineCase, boolean ignoreNullValue) {
@ -225,9 +277,9 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 与给定实体对比并去除相同的部分<br>
* 此方法用于在更新操作时避免所有字段被更新跳过不需要更新的字段 version from 2.0.0
*
* @param <T> 字典对象类型
* @param dict 字典对象
*
* @param <T> 字典对象类型
* @param dict 字典对象
* @param withoutNames 不需要去除的字段名
*/
public <T extends Dict> void removeEqual(T dict, String... withoutNames) {
@ -246,7 +298,7 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 过滤Map保留指定键值对如果键不存在跳过
*
*
* @param keys 键列表
* @return Dict 结果
* @since 4.0.10
@ -263,10 +315,11 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
}
// -------------------------------------------------------------------- Set start
/**
* 设置列
*
* @param attr 属性
*
* @param attr 属性
* @param value
* @return 本身
*/
@ -277,8 +330,8 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 设置列当键或值为null时忽略
*
* @param attr 属性
*
* @param attr 属性
* @param value
* @return 本身
*/
@ -299,8 +352,8 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 获得特定类型值
*
* @param <T> 值类型
*
* @param <T> 值类型
* @param attr 字段名
* @return 字段值
* @since 4.6.3
@ -311,9 +364,9 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 获得特定类型值
*
* @param <T> 值类型
* @param attr 字段名
*
* @param <T> 值类型
* @param attr 字段名
* @param defaultValue 默认值
* @return 字段值
*/
@ -455,7 +508,7 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
@Override
public Object get(Object key) {
return super.get(customKey((String)key));
return super.get(customKey((String) key));
}
@Override
@ -475,7 +528,7 @@ public class Dict extends LinkedHashMap<String, Object> implements BasicTypeGett
/**
* 将Key转为小写
*
*
* @param key KEY
* @return 小写KEY
*/

View File

@ -289,7 +289,11 @@ public class MapUtil {
* </pre>
*
* <pre>
* Map&lt;Object, Object&gt; colorMap = MapUtil.of(new String[][] { { "RED", "#FF0000" }, { "GREEN", "#00FF00" }, { "BLUE", "#0000FF" } });
* Map&lt;Object, Object&gt; colorMap = MapUtil.of(new String[][] {
* { "RED", "#FF0000" },
* { "GREEN", "#00FF00" },
* { "BLUE", "#0000FF" }
* });
* </pre>
* <p>
* 参考commons-lang
@ -305,7 +309,7 @@ public class MapUtil {
}
final HashMap<Object, Object> map = new HashMap<>((int) (array.length * 1.5));
for (int i = 0; i < array.length; i++) {
Object object = array[i];
final Object object = array[i];
if (object instanceof Map.Entry) {
Map.Entry entry = (Map.Entry) object;
map.put(entry.getKey(), entry.getValue());
@ -315,7 +319,7 @@ public class MapUtil {
map.put(entry[0], entry[1]);
}
} else if (object instanceof Iterable) {
Iterator iter = ((Iterable) object).iterator();
final Iterator iter = ((Iterable) object).iterator();
if (iter.hasNext()) {
final Object key = iter.next();
if (iter.hasNext()) {
@ -324,7 +328,7 @@ public class MapUtil {
}
}
} else if (object instanceof Iterator) {
Iterator iter = ((Iterator) object);
final Iterator iter = ((Iterator) object);
if (iter.hasNext()) {
final Object key = iter.next();
if (iter.hasNext()) {