当前位置: 首页 > 知识库问答 >
问题:

如何修改Hashmap的值,它具有键

太叔岳
2023-03-14

我正在尝试修改哈希映射。“value”是由逗号分隔的值组成的单个字符串。(例如:“aid=abc,bid=def,cid=gh2”)

我需要用DB中的相应值替换它们中的特定值。(例如,将bid更改为123,这将导致上述“值”字符串为:“aid=abc,bid=123,cid=gh2”)

然后将修改后的“value”设置为相应的键,以便hashmap由修改后的值组成。

我尝试遍历键,并使用将给出值的map(key),我尝试将其转换为逗号分隔的值列表,然后遍历该列表,在每个字符串中,如果我找到“bid”(上面的示例字符串),那么我会执行必要的操作,然后将其设置回Hashmap(由于字符串不可变,我无法执行此操作)

for(String name: outputMap.keySet())
List urlList=Arrays.asList(outputMap.get(name)(",")); for(int i=0; i

预期结果:“aid=abc,bid=123,cid=gh2”(操作后)实际结果:无法执行。

我使用StringBuffer来解决字符串必须修改的问题,但在这里使用它有点担心,因为这已经进行了多次转换。

代码需要Java7兼容,因为它部署在仍然使用一些遗留环境的客户端机器中。(他们计划迁移到java 8,但计划要晚得多)这里的任何帮助都将不胜感激。

共有1个答案

崔琦
2023-03-14
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

 类似资料:
  • 问题内容: 我想在Java中实现具有多个值的哈希表,即 并且将返回2倍的值。 我怎样才能做到这一点? 问题答案: 您可以改用Multimap。它在列表中为一个键保留多个值。在commons- collection 和Guava中有实现。 这类似于使用值是列表的Hashmap,但是不必显式创建列表。 自己动手做的同一示例如下所示: 请注意,您可以将Multimap用作构建器,并对其调用asMap以返

  • 我想向jsonObject添加一个新字段,这个新字段的名称将基于另一个字段的值。明确地说,这是我想要实现的一个例子。 我想为每个json对象添加一个新的字段,它将以字段“stat”的值作为名称。 我尝试使用JsonPath库执行以下操作,但对我来说,这是一个难看的解决方案,因为我将解析json三次,并进行一些手动替换。 这是得到的结果 有没有更好的方法来达到这个结果呢?我试着用gson来做,但它不

  • 我有一个哈希图,其中一些键指向相同的值。我想找到所有相等的值并打印相应的键。 这是我拥有的当前代码: 当前代码将重复项两次添加到列表中,但它也将每个键添加一次。 谢谢。

  • 问题内容: 考虑以下代码: 程序的输出为: 这里,键如何相互关联。是否所有三个都分配给相同的哈希码?如果是,为什么? 由于这三个值看起来都不同,因此一个值的更改会更改另一个值。这是否意味着只将一个密钥项输入 到任一密钥中,因为所有密钥项都被视为相同的密钥。 问题答案: 当将 null 作为键传递并且null作为特殊情况处理时,不会调用哈希码。 放置方法 将 null 键放在存储区 0中, 并将 n

  • 这是我的的商店代码片段,包含商品和价格: 这是我的杂货车,其中int表示一辆车中每件商品的数量。我对HashMaps非常陌生,对于如何将stock map引用到price方法中并正确地将其相加感到非常困惑。理论上,这个问题的最终答案是2个鸡蛋和2盒橙汁的价格。非常感谢您的帮助

  • 问题内容: 如何将列的默认值从“无”更改为其他值?例如,如果我在创建行时未指定日期,则希望我的日期的默认值是0000-00-00。 我在phpMyAdmin中了解这一点,但是我不确定如何通过命令提示符来做到这一点。 我也了解在添加列时如何执行此操作。但是,我所有的列均已制成,并且其中一些包含数据。 通过搜索,我找到了这条线,但是我不确定那是我想要的吗? 问题答案: 使用 ALTER TABLE 来