From 432f3a0956d603aa9002d6f0f8eac38ffaf6500c Mon Sep 17 00:00:00 2001 From: thewindkee Date: Sat, 15 Oct 2022 00:36:08 +0800 Subject: [PATCH] =?UTF-8?q?FuncKeyMap=E7=9A=84=E5=AD=90=E7=B1=BB=EF=BC=8C?= =?UTF-8?q?=E4=BC=A0=E5=85=A5=E5=8F=AF=E8=A2=AB=E5=BA=8F=E5=88=97=E5=8C=96?= =?UTF-8?q?=E7=9A=84keyFunc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../copier/provider/BeanValueProvider.java | 5 ++++- .../java/cn/hutool/core/map/CamelCaseMap.java | 5 ++++- .../hutool/core/map/CaseInsensitiveMap.java | 5 ++++- .../cn/hutool/core/map/CamelCaseMapTest.java | 19 +++++++++++++++++-- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java b/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java index 9b0d6e956..404032245 100644 --- a/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java +++ b/hutool-core/src/main/java/cn/hutool/core/bean/copier/provider/BeanValueProvider.java @@ -7,9 +7,11 @@ import cn.hutool.core.lang.Editor; import cn.hutool.core.map.FuncKeyMap; import cn.hutool.core.util.StrUtil; +import java.io.Serializable; import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; /** * Bean的值提供者 @@ -47,7 +49,8 @@ public class BeanValueProvider implements ValueProvider { final Map sourcePdMap = BeanUtil.getBeanDesc(source.getClass()).getPropMap(ignoreCase); // issue#2202@Github // 如果用户定义了键编辑器,则提供的map中的数据必须全部转换key - this.sourcePdMap = new FuncKeyMap<>(new HashMap<>(sourcePdMap.size(), 1), (key) -> { + // issue#I5VRHW@Gitee 使Function可以被序列化 + this.sourcePdMap = new FuncKeyMap<>(new HashMap<>(sourcePdMap.size(), 1), (Function & Serializable)(key) -> { if (ignoreCase && key instanceof CharSequence) { key = key.toString().toLowerCase(); } diff --git a/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseMap.java b/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseMap.java index 4759b7202..fd71a49f2 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseMap.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/CamelCaseMap.java @@ -2,8 +2,10 @@ package cn.hutool.core.map; import cn.hutool.core.util.StrUtil; +import java.io.Serializable; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; /** * 驼峰Key风格的Map
@@ -72,7 +74,8 @@ public class CamelCaseMap extends FuncKeyMap { * @param emptyMapBuilder Map构造器,必须构造空的Map */ CamelCaseMap(MapBuilder emptyMapBuilder) { - super(emptyMapBuilder.build(), (key) -> { + // issue#I5VRHW@Gitee 使Function可以被序列化 + super(emptyMapBuilder.build(), (Function & Serializable)(key) -> { if (key instanceof CharSequence) { key = StrUtil.toCamelCase(key.toString()); } diff --git a/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveMap.java b/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveMap.java index 40f805ad0..23ff56412 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveMap.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/CaseInsensitiveMap.java @@ -1,7 +1,9 @@ package cn.hutool.core.map; +import java.io.Serializable; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; /** * 忽略大小写的Map
@@ -72,7 +74,8 @@ public class CaseInsensitiveMap extends FuncKeyMap { * @param emptyMapBuilder 被包装的自定义Map创建器 */ CaseInsensitiveMap(MapBuilder emptyMapBuilder) { - super(emptyMapBuilder.build(), (key)->{ + // issue#I5VRHW@Gitee 使Function可以被序列化 + super(emptyMapBuilder.build(), (Function & Serializable)(key)->{ if (key instanceof CharSequence) { key = key.toString().toLowerCase(); } diff --git a/hutool-core/src/test/java/cn/hutool/core/map/CamelCaseMapTest.java b/hutool-core/src/test/java/cn/hutool/core/map/CamelCaseMapTest.java index 09359517c..d546d7f48 100644 --- a/hutool-core/src/test/java/cn/hutool/core/map/CamelCaseMapTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/map/CamelCaseMapTest.java @@ -1,10 +1,11 @@ package cn.hutool.core.map; +import cn.hutool.core.util.SerializeUtil; import org.junit.Assert; import org.junit.Test; public class CamelCaseMapTest { - + @Test public void caseInsensitiveMapTest() { CamelCaseMap map = new CamelCaseMap<>(); @@ -12,7 +13,7 @@ public class CamelCaseMapTest { Assert.assertEquals("OK", map.get("customKey")); Assert.assertEquals("OK", map.get("custom_key")); } - + @Test public void caseInsensitiveLinkedMapTest() { CamelCaseLinkedMap map = new CamelCaseLinkedMap<>(); @@ -20,4 +21,18 @@ public class CamelCaseMapTest { Assert.assertEquals("OK", map.get("customKey")); Assert.assertEquals("OK", map.get("custom_key")); } + + @Test + public void testSerializable() { + CamelCaseMap map = new CamelCaseMap<>(); + map.put("serializable_key", "OK"); + CamelCaseMap unSerializableMap = SerializeUtil.deserialize(SerializeUtil.serialize(map)); + Assert.assertEquals("OK", unSerializableMap.get("serializable_key")); + Assert.assertEquals("OK", unSerializableMap.get("serializableKey")); + unSerializableMap.put("serializable_func", "OK"); + Assert.assertEquals("OK", unSerializableMap.get("serializable_func")); + Assert.assertEquals("OK", unSerializableMap.get("serializableFunc")); + } + + }