mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-05 17:37:59 +08:00
!838 FuncKeyMap的子类,传入可被序列化的keyFunc
Merge pull request !838 from thedwindkee/v5-dev
This commit is contained in:
commit
aaf94e317d
@ -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<String> {
|
||||
final Map<String, PropDesc> 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<Object, String> & Serializable)(key) -> {
|
||||
if (ignoreCase && key instanceof CharSequence) {
|
||||
key = key.toString().toLowerCase();
|
||||
}
|
||||
|
@ -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<br>
|
||||
@ -72,7 +74,8 @@ public class CamelCaseMap<K, V> extends FuncKeyMap<K, V> {
|
||||
* @param emptyMapBuilder Map构造器,必须构造空的Map
|
||||
*/
|
||||
CamelCaseMap(MapBuilder<K, V> emptyMapBuilder) {
|
||||
super(emptyMapBuilder.build(), (key) -> {
|
||||
// issue#I5VRHW@Gitee 使Function可以被序列化
|
||||
super(emptyMapBuilder.build(), (Function<Object, K> & Serializable)(key) -> {
|
||||
if (key instanceof CharSequence) {
|
||||
key = StrUtil.toCamelCase(key.toString());
|
||||
}
|
||||
|
@ -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<br>
|
||||
@ -72,7 +74,8 @@ public class CaseInsensitiveMap<K, V> extends FuncKeyMap<K, V> {
|
||||
* @param emptyMapBuilder 被包装的自定义Map创建器
|
||||
*/
|
||||
CaseInsensitiveMap(MapBuilder<K, V> emptyMapBuilder) {
|
||||
super(emptyMapBuilder.build(), (key)->{
|
||||
// issue#I5VRHW@Gitee 使Function可以被序列化
|
||||
super(emptyMapBuilder.build(), (Function<Object, K> & Serializable)(key)->{
|
||||
if (key instanceof CharSequence) {
|
||||
key = key.toString().toLowerCase();
|
||||
}
|
||||
|
@ -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<String, String> 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<String, String> 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 serializableKeyFuncTest() {
|
||||
CamelCaseMap<String, String> map = new CamelCaseMap<>();
|
||||
map.put("serializable_key", "OK");
|
||||
CamelCaseMap<String, String> deSerializableMap = SerializeUtil.deserialize(SerializeUtil.serialize(map));
|
||||
Assert.assertEquals("OK", deSerializableMap.get("serializable_key"));
|
||||
Assert.assertEquals("OK", deSerializableMap.get("serializableKey"));
|
||||
deSerializableMap.put("serializable_func", "OK");
|
||||
Assert.assertEquals("OK", deSerializableMap.get("serializable_func"));
|
||||
Assert.assertEquals("OK", deSerializableMap.get("serializableFunc"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user