mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
fix bug
This commit is contained in:
parent
4c1a729e97
commit
d1dea5c88e
@ -1178,20 +1178,10 @@ public class CollUtil {
|
|||||||
return collection;
|
return collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
Collection<T> collection2 = ObjectUtil.clone(collection);
|
final Collection<T> collection2 = create(collection.getClass());
|
||||||
if (null == collection2) {
|
if (isEmpty(collection)) {
|
||||||
// 不支持clone
|
|
||||||
collection2 = create(collection.getClass());
|
|
||||||
}
|
|
||||||
if (isEmpty(collection2)) {
|
|
||||||
return collection2;
|
return collection2;
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
collection2.clear();
|
|
||||||
} catch (UnsupportedOperationException e) {
|
|
||||||
// 克隆后的对象不支持清空,说明为不可变集合对象,使用默认的ArrayList保存结果
|
|
||||||
collection2 = new ArrayList<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
T modified;
|
T modified;
|
||||||
for (T t : collection) {
|
for (T t : collection) {
|
||||||
|
@ -7,7 +7,6 @@ import cn.hutool.core.lang.Filter;
|
|||||||
import cn.hutool.core.lang.Pair;
|
import cn.hutool.core.lang.Pair;
|
||||||
import cn.hutool.core.lang.TypeReference;
|
import cn.hutool.core.lang.TypeReference;
|
||||||
import cn.hutool.core.util.ArrayUtil;
|
import cn.hutool.core.util.ArrayUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
|
||||||
import cn.hutool.core.util.ReflectUtil;
|
import cn.hutool.core.util.ReflectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
||||||
@ -623,25 +622,19 @@ public class MapUtil {
|
|||||||
* @param editor 编辑器接口
|
* @param editor 编辑器接口
|
||||||
* @return 编辑后的Map
|
* @return 编辑后的Map
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public static <K, V> Map<K, V> edit(Map<K, V> map, Editor<Entry<K, V>> editor) {
|
public static <K, V> Map<K, V> edit(Map<K, V> map, Editor<Entry<K, V>> editor) {
|
||||||
if (null == map || null == editor) {
|
if (null == map || null == editor) {
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<K, V> map2 = ObjectUtil.clone(map);
|
Map<K, V> map2 = ReflectUtil.newInstanceIfPossible(map.getClass());
|
||||||
if(null == map2){
|
if(null == map2){
|
||||||
// 不支持clone
|
|
||||||
map2 = new HashMap<>(map.size(), 1f);
|
map2 = new HashMap<>(map.size(), 1f);
|
||||||
}
|
}
|
||||||
if (isEmpty(map2)) {
|
if (isEmpty(map)) {
|
||||||
return map2;
|
return map2;
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
map2.clear();
|
|
||||||
} catch (UnsupportedOperationException e) {
|
|
||||||
// 克隆后的对象不支持清空,说明为不可变集合对象,使用默认的ArrayList保存结果
|
|
||||||
map2 = new HashMap<>(map.size(), 1f);
|
|
||||||
}
|
|
||||||
|
|
||||||
Entry<K, V> modified;
|
Entry<K, V> modified;
|
||||||
for (Entry<K, V> entry : map.entrySet()) {
|
for (Entry<K, V> entry : map.entrySet()) {
|
||||||
@ -690,20 +683,14 @@ public class MapUtil {
|
|||||||
if(null == map || null == keys){
|
if(null == map || null == keys){
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
Map<K, V> map2 = ObjectUtil.clone(map);
|
|
||||||
|
Map<K, V> map2 = ReflectUtil.newInstanceIfPossible(map.getClass());
|
||||||
if(null == map2){
|
if(null == map2){
|
||||||
// 不支持clone
|
|
||||||
map2 = new HashMap<>(map.size(), 1f);
|
map2 = new HashMap<>(map.size(), 1f);
|
||||||
}
|
}
|
||||||
if (isEmpty(map2)) {
|
if (isEmpty(map)) {
|
||||||
return map2;
|
return map2;
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
map2.clear();
|
|
||||||
} catch (UnsupportedOperationException e) {
|
|
||||||
// 克隆后的对象不支持清空,说明为不可变集合对象,使用默认的ArrayList保存结果
|
|
||||||
map2 = new HashMap<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (K key : keys) {
|
for (K key : keys) {
|
||||||
if (map.containsKey(key)) {
|
if (map.containsKey(key)) {
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package cn.hutool.core.map;
|
package cn.hutool.core.map;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -30,7 +32,7 @@ public class MapWrapper<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, S
|
|||||||
*/
|
*/
|
||||||
protected static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
|
protected static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
|
||||||
|
|
||||||
private final Map<K, V> raw;
|
private Map<K, V> raw;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构造
|
* 构造
|
||||||
@ -199,5 +201,14 @@ public class MapWrapper<K, V> implements Map<K, V>, Iterable<Map.Entry<K, V>>, S
|
|||||||
public V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
|
public V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
|
||||||
return raw.merge(key, value, remappingFunction);
|
return raw.merge(key, value, remappingFunction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MapWrapper<K, V> clone() throws CloneNotSupportedException {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
final MapWrapper<K, V> clone = (MapWrapper<K, V>) super.clone();
|
||||||
|
clone.raw = ObjectUtil.clone(raw);
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------- Override default methods end
|
//---------------------------------------------------------------------------- Override default methods end
|
||||||
}
|
}
|
||||||
|
@ -848,7 +848,7 @@ public class ReflectUtil {
|
|||||||
*
|
*
|
||||||
* @param <T> 对象类型
|
* @param <T> 对象类型
|
||||||
* @param beanClass 被构造的类
|
* @param beanClass 被构造的类
|
||||||
* @return 构造后的对象
|
* @return 构造后的对象,构造失败返回{@code null}
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static <T> T newInstanceIfPossible(Class<T> beanClass) {
|
public static <T> T newInstanceIfPossible(Class<T> beanClass) {
|
||||||
|
@ -26,6 +26,24 @@ public class MapUtilTest {
|
|||||||
Assert.assertEquals("4", map2.get("d"));
|
Assert.assertEquals("4", map2.get("d"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void filterMapWrapperTest() {
|
||||||
|
Map<String, String> map = MapUtil.newHashMap();
|
||||||
|
map.put("a", "1");
|
||||||
|
map.put("b", "2");
|
||||||
|
map.put("c", "3");
|
||||||
|
map.put("d", "4");
|
||||||
|
|
||||||
|
final Map<String, String> camelCaseMap = MapUtil.toCamelCaseMap(map);
|
||||||
|
|
||||||
|
Map<String, String> map2 = MapUtil.filter(camelCaseMap, t -> Convert.toInt(t.getValue()) % 2 == 0);
|
||||||
|
|
||||||
|
Assert.assertEquals(2, map2.size());
|
||||||
|
|
||||||
|
Assert.assertEquals("2", map2.get("b"));
|
||||||
|
Assert.assertEquals("4", map2.get("d"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void filterContainsTest() {
|
public void filterContainsTest() {
|
||||||
Map<String, String> map = MapUtil.newHashMap();
|
Map<String, String> map = MapUtil.newHashMap();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user