Java Map<String, Object> 转 Map<String, String>
·
有几种方法可以将 Map<String, Object> 转换为 Map<String, String>
方法1:使用循环遍历转换(推荐)
Map<String, Object> originalMap = new HashMap<>();
// 假设 originalMap 已经包含了一些数据
Map<String, String> stringMap = new HashMap<>();
for (Map.Entry<String, Object> entry : originalMap.entrySet()) {
if (entry.getValue() != null) {
stringMap.put(entry.getKey(), entry.getValue().toString());
} else {
stringMap.put(entry.getKey(), null); // 或者使用空字符串 ""
}
}
方法2:使用 Stream API(Java 8+)
Map<String, String> stringMap = originalMap.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue() != null ? entry.getValue().toString() : null
));
方法3:处理 null 值的 Stream 版本
Map<String, String> stringMap = originalMap.entrySet().stream()
.filter(entry -> entry.getValue() != null) // 过滤掉 null 值
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue().toString()
));
方法4:使用工具方法
public class MapUtils {
public static Map<String, String> convertToStringMap(Map<String, Object> originalMap) {
if (originalMap == null) {
return new HashMap<>();
}
Map<String, String> result = new HashMap<>();
for (Map.Entry<String, Object> entry : originalMap.entrySet()) {
if (entry.getValue() != null) {
result.put(entry.getKey(), entry.getValue().toString());
}
}
return result;
}
}
// 使用
Map<String, String> stringMap = MapUtils.convertToStringMap(originalMap);
方法5:使用第三方库(如 Apache Commons)
如果你使用 Apache Commons Lang:
import org.apache.commons.lang3.StringUtils;
Map<String, String> stringMap = originalMap.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> StringUtils.defaultString(entry.getValue() != null ?
entry.getValue().toString() : null)
));
完整示例
import java.util.*;
import java.util.stream.Collectors;
public class MapConversionExample {
public static void main(String[] args) {
// 创建原始 Map
Map<String, Object> originalMap = new HashMap<>();
originalMap.put("name", "张三");
originalMap.put("age", 25);
originalMap.put("salary", 5000.50);
originalMap.put("isActive", true);
originalMap.put("nullValue", null);
// 方法1:循环遍历
Map<String, String> method1 = new HashMap<>();
for (Map.Entry<String, Object> entry : originalMap.entrySet()) {
if (entry.getValue() != null) {
method1.put(entry.getKey(), entry.getValue().toString());
} else {
method1.put(entry.getKey(), "null");
}
}
// 方法2:Stream API
Map<String, String> method2 = originalMap.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue() != null ? entry.getValue().toString() : "null"
));
System.out.println("原始Map: " + originalMap);
System.out.println("转换后: " + method2);
}
}
注意事项
-
null 值处理:根据业务需求决定如何处理 null 值
-
性能考虑:对于大数据量,Stream API 可能稍慢于传统循环
-
异常处理:如果某些对象的
toString()方法可能抛出异常,需要适当处理 -
线程安全:如果需要在多线程环境下使用,考虑使用
ConcurrentHashMap
推荐使用方法1或方法2,根据你的具体需求和代码风格选择。

更多推荐



所有评论(0)