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