我正在尝试修改Hashmap。 “值”是由逗号分隔的值组成的单个字符串。 (例如:“ aid = abc,bid = def,cid = gh2”)
我需要用数据库中的相应值替换它们中的特定值。 (例如,将出价更改为123,这将导致上面的“值”字符串为:“ aid = abc,bid = 123,cid = gh2”)
然后将修改后的“值”设置为相应的键,以使哈希图由修改后的值组成。
我尝试遍历keys,并使用map(key)给出值,我尝试将其转换为逗号分隔值的列表,然后遍历该列表以及每个字符串(如果有)我找到了“出价”(上面的示例字符串),然后进行了必要的操作,然后将其设置回Hashmap(由于Strings arent不可变,所以我无法执行此操作)
用于(字符串名称:outputMap.keySet())
列表urlList = Arrays.asList(outputMap.get(name).split(“,”)); for(int i = 0; i
预期结果:“ aid = abc,bid = 123,cid = gh2”(发布操作) 实际结果:无能为力。
我使用Stringbuffer来解决必须修改字符串的问题,但是由于在这里已经进行了多次转换,因此有点担心。
该代码需要符合Java 7,因为该代码已部署在仍使用某些旧版环境的客户端计算机中。(它们计划迁移到Java 8,但计划在以后使用)。 任何帮助,我们将不胜感激。
答案 0 :(得分:0)
static Map<String, String> replace(Map<String, String> map, String toReplace, String replacement) {
return map.entrySet().stream()
.collect(Collectors.toMap(Entry::getKey,
e -> transformValue(e.getValue(), toReplace, replacement)));
}
static String transformValue(String value, String toReplace, String replacement) {
return Arrays.stream(value.split(","))
.map(pair -> pair.split("="))
.map(sPair -> sPair[0] + "=" + (toReplace.equals(sPair[0]) ? replacement : sPair[1]))
.collect(Collectors.joining(","));
}
这将遍历map的所有条目并创建一个具有更改值的新map。示例:
var map = Map.of("key1", "aid=abc,bid=def,cid=gh2");
System.out.println(replace(map, "bid", "123").get("key1"));
将打印aid=abc,bid=123,cid=gh2