如何将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()); } }
问题分析
这段代码有两个核心问题:
- 强制类型转换报错:直接用
(String)强转Integer、LocalDate类型的值会抛出ClassCastException,因为这些类型不能直接转为String。 - 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
相关产品推荐
相关产品推荐

