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

时间:2015-02-04 12:02:18

标签: java hashmap

我有一个hashmap,其中包含student id作为键,一些字符串作为value。 它包含像

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

我想在map中找到重复的值,并用genreic值替换它们。我想要一张像

这样的地图
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 个答案:

答案 0 :(得分:2)

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

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);
}