如何修改具有键和值作为字符串的Hashmap的值,并且“值”是由逗号分隔的值组成的单个字符串

时间:2019-05-15 22:26:29

标签: string hashmap java-7 stringbuffer

我正在尝试修改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,但计划在以后使用)。 任何帮助,我们将不胜感激。

1 个答案:

答案 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