From a4e30936fb1873bb2d4136b30152add53a308c43 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 24 Aug 2020 17:47:16 +0800 Subject: [PATCH] add of --- CHANGELOG.md | 5 +- .../main/java/cn/hutool/core/lang/Dict.java | 149 ++++++++++++------ .../main/java/cn/hutool/core/map/MapUtil.java | 12 +- 3 files changed, 112 insertions(+), 54 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9abc6843..b3d7a6032 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,8 +14,9 @@ * 【core 】 增加PathUtil和FileNameUtil,分离FileUtil中部分方法 * 【core 】 改造IndexedComparator,增加InstanceComparator * 【extra 】 增加CglibUtil -* 【extra 】 增加Ipv4Util(pr#161@Gitee) -* 【extra 】 增加CalendarUtil和DateUtil增加isSameMonth方法(pr#161@Gitee) +* 【core 】 增加Ipv4Util(pr#161@Gitee) +* 【core 】 增加CalendarUtil和DateUtil增加isSameMonth方法(pr#161@Gitee) +* 【core 】 Dict增加of方法(issue#1035@Github) ### Bug修复# * 【poi 】 修复ExcelBase.isXlsx方法判断问题(issue#I1S502@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Dict.java b/hutool-core/src/main/java/cn/hutool/core/lang/Dict.java index 27f74da5a..3f617fd84 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/Dict.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/Dict.java @@ -17,9 +17,8 @@ import java.util.Map; /** * 字典对象,扩充了HashMap中的方法 - * - * @author loolly * + * @author loolly */ public class Dict extends LinkedHashMap implements BasicTypeGetter { private static final long serialVersionUID = 6135423866861206530L; @@ -27,13 +26,16 @@ public class Dict extends LinkedHashMap 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 implements BasicTypeGett /** * 将PO对象转为Dict - * - * @param Bean类型 + * + * @param Bean类型 * @param bean Bean对象 * @return Vo */ public static Dict parse(T bean) { return create().parseBean(bean); } + + /** + * 根据给定的Pair数组创建Dict对象 + * + * @param pairs 键值对 + * @return Dict + * @since 5.4.1 + */ + @SafeVarargs + public static Dict of(Pair... pairs) { + final Dict dict = create(); + for (Pair pair : pairs) { + dict.put(pair.getKey(), pair.getValue()); + } + return dict; + } + + /** + * 根据给定的键值对数组创建Dict对象,传入参数必须为key,value,key,value... + * + *

奇数参数必须为key,key最后会转换为String类型。

+ *

奇数参数必须为value,可以为任意类型。

+ * + *
+	   Dict dict = Dict.of(
+	 * 	"RED", "#FF0000",
+	 * 	"GREEN", "#00FF00",
+	 * 	"BLUE", "#0000FF"
+	 * );
+	 * 
+ * + * @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 implements BasicTypeGett /** * 构造 - * + * * @param caseInsensitive 是否大小写不敏感 */ public Dict(boolean caseInsensitive) { @@ -71,7 +123,7 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 构造 - * + * * @param initialCapacity 初始容量 */ public Dict(int initialCapacity) { @@ -80,7 +132,7 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 构造 - * + * * @param initialCapacity 初始容量 * @param caseInsensitive 是否大小写不敏感 */ @@ -90,9 +142,9 @@ public class Dict extends LinkedHashMap 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 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 implements BasicTypeGett /** * 构造 - * + * * @param m Map */ public Dict(Map m) { @@ -123,8 +175,8 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 转换为Bean对象 - * - * @param Bean类型 + * + * @param Bean类型 * @param bean Bean * @return Bean */ @@ -134,8 +186,8 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 转换为Bean对象 - * - * @param Bean类型 + * + * @param Bean类型 * @param bean Bean * @return Bean * @since 3.3.1 @@ -147,9 +199,9 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 转换为Bean对象 - * - * @param Bean类型 - * @param bean Bean + * + * @param Bean类型 + * @param bean Bean * @param isToCamelCase 是否转换为驼峰模式 * @return Bean */ @@ -160,8 +212,8 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 转换为Bean对象,并使用驼峰法模式转换 - * - * @param Bean类型 + * + * @param Bean类型 * @param bean Bean * @return Bean */ @@ -172,8 +224,8 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 填充Value Object对象 - * - * @param Bean类型 + * + * @param Bean类型 * @param clazz Value Object(或者POJO)的类 * @return vo */ @@ -183,8 +235,8 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 填充Value Object对象,忽略大小写 - * - * @param Bean类型 + * + * @param Bean类型 * @param clazz Value Object(或者POJO)的类 * @return vo */ @@ -195,8 +247,8 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 将值对象转换为Dict
* 类名会被当作表名,小写第一个字母 - * - * @param Bean类型 + * + * @param Bean类型 * @param bean 值对象 * @return 自己 */ @@ -209,11 +261,11 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 将值对象转换为Dict
* 类名会被当作表名,小写第一个字母 - * - * @param Bean类型 - * @param bean 值对象 + * + * @param Bean类型 + * @param bean 值对象 * @param isToUnderlineCase 是否转换为下划线模式 - * @param ignoreNullValue 是否忽略值为空的字段 + * @param ignoreNullValue 是否忽略值为空的字段 * @return 自己 */ public Dict parseBean(T bean, boolean isToUnderlineCase, boolean ignoreNullValue) { @@ -225,9 +277,9 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 与给定实体对比并去除相同的部分
* 此方法用于在更新操作时避免所有字段被更新,跳过不需要更新的字段 version from 2.0.0 - * - * @param 字典对象类型 - * @param dict 字典对象 + * + * @param 字典对象类型 + * @param dict 字典对象 * @param withoutNames 不需要去除的字段名 */ public void removeEqual(T dict, String... withoutNames) { @@ -246,7 +298,7 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 过滤Map保留指定键值对,如果键不存在跳过 - * + * * @param keys 键列表 * @return Dict 结果 * @since 4.0.10 @@ -263,10 +315,11 @@ public class Dict extends LinkedHashMap implements BasicTypeGett } // -------------------------------------------------------------------- Set start + /** * 设置列 - * - * @param attr 属性 + * + * @param attr 属性 * @param value 值 * @return 本身 */ @@ -277,8 +330,8 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 设置列,当键或值为null时忽略 - * - * @param attr 属性 + * + * @param attr 属性 * @param value 值 * @return 本身 */ @@ -299,8 +352,8 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 获得特定类型值 - * - * @param 值类型 + * + * @param 值类型 * @param attr 字段名 * @return 字段值 * @since 4.6.3 @@ -311,9 +364,9 @@ public class Dict extends LinkedHashMap implements BasicTypeGett /** * 获得特定类型值 - * - * @param 值类型 - * @param attr 字段名 + * + * @param 值类型 + * @param attr 字段名 * @param defaultValue 默认值 * @return 字段值 */ @@ -455,7 +508,7 @@ public class Dict extends LinkedHashMap 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 implements BasicTypeGett /** * 将Key转为小写 - * + * * @param key KEY * @return 小写KEY */ diff --git a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java index 8a9c26c54..19fca267c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/MapUtil.java @@ -289,7 +289,11 @@ public class MapUtil { * * *
-	 * Map<Object, Object> colorMap = MapUtil.of(new String[][] { { "RED", "#FF0000" }, { "GREEN", "#00FF00" }, { "BLUE", "#0000FF" } });
+	 * Map<Object, Object> colorMap = MapUtil.of(new String[][] {
+	 * 	{ "RED", "#FF0000" },
+	 * 	{ "GREEN", "#00FF00" },
+	 * 	{ "BLUE", "#0000FF" }
+	 * });
 	 * 
*

* 参考:commons-lang @@ -305,7 +309,7 @@ public class MapUtil { } final HashMap 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()) {