You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将List<Map<String, Object>>转换为List<Map<String, String>>?

如何将List<Map<String, Object>>转换为List<Map<String, String>>?

我需要把List<Map<String, Object>>转换成List<Map<String, String>>,其中Object的类型包括Integer、String和LocalDate。我尝试了下面的代码,但无法正常运行:

Map<String, String> newMap = new HashMap<String, String>();

for (Map<String, Object> element: list) {
    for (Entry<String, Object> entry : element.entrySet()) {
        newMap.put(entry.getKey(), (String) entry.getValue());
    }
}

问题分析

这段代码有两个核心问题:

  1. 强制类型转换报错:直接用(String)强转Integer、LocalDate类型的值会抛出ClassCastException,因为这些类型不能直接转为String。
  2. Map引用重复:只创建了一个newMap,循环中会不断覆盖其内容,最终List里的所有元素都是同一个Map的引用,结果不符合预期。

更新说明
感谢帮助!以下是修正后的完整可运行实现:

// 数据准备
LocalDate date = LocalDate.now();
Map<String, Object> map1 = new HashMap<>();
map1.put("key1", 4);
Map<String, Object> map2 = new HashMap<>();
map2.put("key2", date);
List<Map<String, Object>> subject = new ArrayList<>();
subject.add(0, map1);
subject.add(1, map2);

System.out.println(subject);

List<Map<String,String>> newList = new ArrayList<>();

for (Map<String, Object> element : subject) {
    Map<String, String> newMap = new HashMap<>(); // 每个原Map对应一个新的String类型Map
    for (Map.Entry<String, Object> entry : element.entrySet()) {
        newMap.put(entry.getKey(), String.valueOf(entry.getValue()));
    }
    newList.add(newMap); // 处理完当前原Map的所有键值对后,再加入结果List
}

// 测试结果
System.out.println("----------------------------");
System.out.println(newList.get(0).get("key1").getClass());
System.out.println(newList.get(1).get("key2").getClass());
System.out.println(newList);

关键优化点

  • 使用String.valueOf()替代强制类型转换:该方法可以安全地将任意Object转为String,内部会调用对象的toString()方法,适配Integer、LocalDate等类型。
  • 每个原Map对应创建新的目标Map:避免了重复引用问题,确保结果List中的每个Map都是独立的实例。

内容的提问来源于stack exchange,提问作者NyashMyash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:31:23