From de52d71031292aa8639d45376adb07f40447c012 Mon Sep 17 00:00:00 2001 From: wenbei <569063716@qq.com> Date: Tue, 26 Jul 2022 11:55:00 +0800 Subject: [PATCH] 1.update Convert.toMap, If value is a map type, use its own type; otherwise, use HashMap 2.add Convert.toMap, Overload a method to specify the map type of conversion --- .../java/cn/hutool/core/convert/Convert.java | 24 +++++++++++++++-- .../core/convert/ConvertToBeanTest.java | 26 +++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java b/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java index a67682904..7bc2a5b88 100755 --- a/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java @@ -601,7 +601,7 @@ public class Convert { } /** - * 转换为Map + * 转换为Map,若value原本就是Map,则使用原始类型若不是 * * @param 键类型 * @param 值类型 @@ -613,7 +613,27 @@ public class Convert { */ @SuppressWarnings("unchecked") public static Map toMap(Class keyType, Class valueType, Object value) { - return (Map) new MapConverter(HashMap.class, keyType, valueType).convert(value, null); + if(value instanceof Map){ + return toMap((Class) value.getClass(), keyType, valueType,value); + }else{ + return toMap(HashMap.class, keyType, valueType,value); + } + } + + /** + * 转换为Map + * + * @param mapType 转后的具体Map类型 + * @param 键类型 + * @param 值类型 + * @param keyType 键类型 + * @param valueType 值类型 + * @param value 被转换的值 + * @return {@link Map} + */ + @SuppressWarnings("unchecked") + public static Map toMap(Class mapType, Class keyType, Class valueType, Object value) { + return (Map) new MapConverter(mapType, keyType, valueType).convert(value, null); } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java index 8ab5b15ff..f37bb9e3a 100755 --- a/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/convert/ConvertToBeanTest.java @@ -2,6 +2,7 @@ package cn.hutool.core.convert; import cn.hutool.core.bean.BeanUtilTest.SubPerson; import cn.hutool.core.lang.TypeReference; +import cn.hutool.core.map.CaseInsensitiveMap; import org.junit.Assert; import org.junit.Test; @@ -67,7 +68,32 @@ public class ConvertToBeanTest { Assert.assertEquals("3", map2.get("key3")); Assert.assertEquals("4", map2.get("key4")); } + @Test + public void mapToMapWithSelfTypeTest() { + CaseInsensitiveMap caseInsensitiveMap = new CaseInsensitiveMap<>(); + caseInsensitiveMap.put("jerry", 1); + caseInsensitiveMap.put("Jerry", 2); + caseInsensitiveMap.put("tom", 3); + + Map map = Convert.toMap(String.class, String.class, caseInsensitiveMap); + Assert.assertEquals("2", map.get("jerry")); + Assert.assertEquals("2", map.get("Jerry")); + Assert.assertEquals("3", map.get("tom")); + } + @Test + public void beanToSpecifyMapTest() { + SubPerson person = new SubPerson(); + person.setAge(14); + person.setOpenid("11213232"); + person.setName("测试A11"); + person.setSubName("sub名字"); + + Map map = Convert.toMap(LinkedHashMap.class, String.class, String.class, person); + Assert.assertEquals("测试A11", map.get("name")); + Assert.assertEquals("14", map.get("age")); + Assert.assertEquals("11213232", map.get("openid")); + } @Test public void mapToBeanTest() { HashMap map = new HashMap<>();