Files
yjearth/src/main/java/com/yj/earth/common/util/MapUtil.java
2025-09-08 17:01:50 +08:00

117 lines
3.8 KiB
Java

package com.yj.earth.common.util;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;
public class MapUtil {
private static final ObjectMapper objectMapper = new ObjectMapper();
/**
* 合并两个 Map、如果存在相同的 Key、则用新 Map 中的值替换原始 Map 中的值
* 如果原始 Map 中有某个 Key 而新 Map 中没有、则保持原始 Map 中的值不变
*/
public static <K, V> void mergeMaps(Map<K, V> originalMap, Map<K, V> newMap) {
// 检查参数是否为null、避免空指针异常
if (originalMap == null || newMap == null) {
throw new IllegalArgumentException("参数Map不能为null");
}
// 遍历新Map中的所有键值对
for (Map.Entry<K, V> entry : newMap.entrySet()) {
K key = entry.getKey();
// 如果原始Map中存在相同的key、则替换值
if (originalMap.containsKey(key)) {
originalMap.put(key, entry.getValue());
}
// 如果原始Map中不存在该key、则不做任何操作
}
}
/**
* 将JSON字符串转换为Map对象
*
* @param jsonString JSON格式的字符串
* @return 转换后的Map对象、如果JSON为空则返回空Map
* @throws IllegalArgumentException 当JSON字符串无效或解析失败时抛出
*/
public static <K, V> Map<K, V> jsonToMap(String jsonString) {
if (jsonString == null || jsonString.trim().isEmpty()) {
return new HashMap<>();
}
try {
// 将JSON字符串转换为Map
return objectMapper.readValue(jsonString, Map.class);
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("JSON字符串解析失败: " + e.getMessage(), e);
}
}
/**
* 将 Map 对象转换为JSON字符串
*/
public static <K, V> String mapToString(Map<K, V> map) {
if (map == null) {
return "";
}
try {
// 将Map转换为JSON字符串
return objectMapper.writeValueAsString(map);
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("Map转换为JSON字符串失败: " + e.getMessage(), e);
}
}
/**
* 将任意类型对象转换为JSON字符串
*/
public static <T> String objectToJson(T object) {
if (object == null) {
return "";
}
try {
// 将对象转换为JSON字符串
return objectMapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("对象转换为JSON字符串失败: " + e.getMessage(), e);
}
}
/**
* 从Map中获取指定key的字符串值
*
* @param map 数据源Map
* @param key 要获取的字段名
* @return 字段的字符串值、如果map为null或key不存在则返回null
*/
public static String getString(Map<?, ?> map, String key) {
if (map == null || key == null) {
return null;
}
Object value = map.get(key);
return value != null ? value.toString() : null;
}
/**
* 直接从JSON字符串中获取指定key的字符串值
*
* @param jsonString JSON格式的字符串
* @param key 要获取的字段名
* @return 字段的字符串值、如果JSON为空或key不存在则返回null
*/
public static String getString(String jsonString, String key) {
if (jsonString == null || key == null) {
return null;
}
Map<?, ?> map = jsonToMap(jsonString);
return getString(map, key);
}
}