Java中如何正确替换MultiValueMap<String, List<?>>的嵌套列表值?
问题分析
你遇到的嵌套列表问题,根源在于MultiValueMap<String, List<?>>的泛型定义——它本质是Map<String, List<List<?>>>,每个键对应一组List对象。调用set方法时传入Collections.singletonList(str),这个方法会把传入的List作为单个元素塞进外层列表,自然就出现了[[a new string]]的嵌套结构。
解决方案
方案1:修正泛型定义(推荐,若允许调整)
如果其他代码允许,把泛型改成MultiValueMap<String, String>,这才匹配你示例里的结构(每个键对应一组字符串),之后直接用set方法就能正常赋值:
String str = "a new string"; multimap.set("var1", str); System.out.println(multimap.get("var1")); // 输出 [a new string]
方案2:保留原泛型的情况下绕过嵌套
如果必须保留MultiValueMap<String, List<?>>,可以直接操作它的底层Map结构,跳过MultiValueMap的set/add方法直接赋值:
String str = "a new string"; // 先移除原有值 multimap.remove("var1"); // 强制转换为Map后设置目标List(会有未检查转换警告,可加@SuppressWarnings消除) ((Map<String, List<?>>) multimap).put("var1", Collections.singletonList(str)); System.out.println(multimap.get("var1")); // 输出 [a new string]
内容的提问来源于stack exchange,提问作者ban_ana
相关产品推荐
相关产品推荐

