mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +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.map.FuncKeyMap;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bean的值提供者
|
* Bean的值提供者
|
||||||
@ -47,7 +49,8 @@ public class BeanValueProvider implements ValueProvider<String> {
|
|||||||
final Map<String, PropDesc> sourcePdMap = BeanUtil.getBeanDesc(source.getClass()).getPropMap(ignoreCase);
|
final Map<String, PropDesc> sourcePdMap = BeanUtil.getBeanDesc(source.getClass()).getPropMap(ignoreCase);
|
||||||
// issue#2202@Github
|
// issue#2202@Github
|
||||||
// 如果用户定义了键编辑器,则提供的map中的数据必须全部转换key
|
// 如果用户定义了键编辑器,则提供的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) {
|
if (ignoreCase && key instanceof CharSequence) {
|
||||||
key = key.toString().toLowerCase();
|
key = key.toString().toLowerCase();
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,10 @@ package cn.hutool.core.map;
|
|||||||
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 驼峰Key风格的Map<br>
|
* 驼峰Key风格的Map<br>
|
||||||
@ -72,7 +74,8 @@ public class CamelCaseMap<K, V> extends FuncKeyMap<K, V> {
|
|||||||
* @param emptyMapBuilder Map构造器,必须构造空的Map
|
* @param emptyMapBuilder Map构造器,必须构造空的Map
|
||||||
*/
|
*/
|
||||||
CamelCaseMap(MapBuilder<K, V> emptyMapBuilder) {
|
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) {
|
if (key instanceof CharSequence) {
|
||||||
key = StrUtil.toCamelCase(key.toString());
|
key = StrUtil.toCamelCase(key.toString());
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package cn.hutool.core.map;
|
package cn.hutool.core.map;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 忽略大小写的Map<br>
|
* 忽略大小写的Map<br>
|
||||||
@ -72,7 +74,8 @@ public class CaseInsensitiveMap<K, V> extends FuncKeyMap<K, V> {
|
|||||||
* @param emptyMapBuilder 被包装的自定义Map创建器
|
* @param emptyMapBuilder 被包装的自定义Map创建器
|
||||||
*/
|
*/
|
||||||
CaseInsensitiveMap(MapBuilder<K, V> emptyMapBuilder) {
|
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) {
|
if (key instanceof CharSequence) {
|
||||||
key = key.toString().toLowerCase();
|
key = key.toString().toLowerCase();
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package cn.hutool.core.map;
|
package cn.hutool.core.map;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.SerializeUtil;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class CamelCaseMapTest {
|
public class CamelCaseMapTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void caseInsensitiveMapTest() {
|
public void caseInsensitiveMapTest() {
|
||||||
CamelCaseMap<String, String> map = new CamelCaseMap<>();
|
CamelCaseMap<String, String> map = new CamelCaseMap<>();
|
||||||
@ -12,7 +13,7 @@ public class CamelCaseMapTest {
|
|||||||
Assert.assertEquals("OK", map.get("customKey"));
|
Assert.assertEquals("OK", map.get("customKey"));
|
||||||
Assert.assertEquals("OK", map.get("custom_key"));
|
Assert.assertEquals("OK", map.get("custom_key"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void caseInsensitiveLinkedMapTest() {
|
public void caseInsensitiveLinkedMapTest() {
|
||||||
CamelCaseLinkedMap<String, String> map = new CamelCaseLinkedMap<>();
|
CamelCaseLinkedMap<String, String> map = new CamelCaseLinkedMap<>();
|
||||||
@ -20,4 +21,18 @@ public class CamelCaseMapTest {
|
|||||||
Assert.assertEquals("OK", map.get("customKey"));
|
Assert.assertEquals("OK", map.get("customKey"));
|
||||||
Assert.assertEquals("OK", map.get("custom_key"));
|
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…
x
Reference in New Issue
Block a user