替换hashmap java中的重复值字符串

Posted

技术标签:

【中文标题】替换hashmap java中的重复值字符串【英文标题】:replace duplicate values string in hashmap java 【发布时间】:2015-04-03 22:42:22 【问题描述】:

我有一个哈希图,其中包含学生 ID 作为键和一些字符串作为值。 它包含像

这样的数据
a abc.txt
b cde.txt
d abc.txt

我想在地图中找到重复的值并将它们替换为流派值。我想要一张类似的地图

a abc.txt
b cde.txt
d abc_replacevalue.txt 

我已经尝试了代码,但它不起作用

Map<String,String> filemap = new HashMap<String,String>();
// filemap is the original hash map..

Set<String> seenValues = new HashSet<String>();
Map<String, String> result = new HashMap<String, String>();

for (Map.Entry<String, String> entry : filemap.entrySet()) 
    String value = entry.getValue();

    if (seenValues.contains(value)) 
        value = "updated"; // update value here
    
    result.put(entry.getKey(), value);
    seenValues.add(value);


for (String key : result.keySet() ) 
    String value = result.get( key );
    System.out.println(key + " = " + value);

输出还是一样

a abc.txt
b cde.txt
d abc.txt

【问题讨论】:

【参考方案1】:

您可以从现有地图生成新地图,检查您遇到的每个新值以查看它是否已经被看到:

Set<String> seenValues = new HashSet<String>();
Map<String, String> result = new HashMap<String, String>();

for (Map.Entry<String, String> entry : original.entrySet()) 
    String value = entry.getValue();

    if (seenValues.contains(value)) 
        value = ...; // update value here
    
    result.put(entry.getKey(), value);
    seenValues.add(value);

【讨论】:

无论如何您都需要添加更新后的值,这样实际上不会保存任何内容。 我调用的 add 可以添加更新的值,而你的只添加原始值。如果您需要更新 if 块中的值然后添加它,那么您有两个调用 add,其中一个也是成员资格测试。相反,我有一项成员资格测试和一项添加。 -.- .... 你说得对。我错过了,这个调用添加了 updated value。没关系,一切都很好:D.

以上是关于替换hashmap java中的重复值字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何用数据框中的字符串值替换 int 值[重复]

使用java 8流将字符串替换为哈希图值

向 HashSet/HashMap 添加重复值是不是会替换先前的值

java List中的HashMap,去掉重复列。按json输出

用 JSON 字符串中的 hex 替换所有 r、g、b 值 [重复]

存储现有值时,Java的HashMap密钥替换