gpt4 book ai didi

java - 替换 hashmap java 中的重复值

转载 作者:行者123 更新时间:2023-12-02 11:02:18 25 4
gpt4 key购买 nike

我有一个 HashMap ,其中包含学生 ID 作为键和一些字符串作为值。

Map<Integer, String> data = new HashMap<Integer, String>();

它包含类似的数据

1 a
2 b
3 a
4 c
5 b
6 a

我想找到 map 中的重复值并将其替换为整数值。即我想要一张像这样的 map

1 1
2 2
3 1
4 3
5 2
6 1

即 map 应该选择第一个值(a),找到该值的所有键,然后将这些键的值替换为1。然后选择第二个值(b),找到所有键并将它们替换为2,依此类推。我正在读取的文件太大,因此我无法通过指定每个键来手动替换所有键。所以,到目前为止我尝试过的是

Map<Integer,Integer> finalmap = new HashMap<Integer,Integer>();
int a=0;
List mapkey = new ArrayList(data.keySet());
List mapval = new ArrayList(data.values());
Iterator valit = mapval.iterator();
while(valit.hasNext()){
a=a+1;
Object valuet = valit.next();

Iterator keyit = mapkey.iterator();
while(keyit.hasNext()){
Object keyt = keyit.next();

String comp1 = data.get(keyt).toString();
String comp2 = valuet.toString();
if(comp1.equals(comp2)){
finalmap.put((String)keyt,a);
}

}

}

但这并没有给我正确的输出。它不是以 a=1 开头的。我认为它可能首先计算 a 的所有增量值。我有一个包含 1000 条记录的文本文件。我得到的输出是

1 1000
2 987
3 1000
4 298
5 987
6 1000

我不知道我错在哪里。请帮助我解决这个问题。谢谢您

最佳答案

首先您需要了解,HashMap 中不存在“第一个”值。如果您希望根据键进行排序,则应该使用 TreeMap 来代替。

如果您不关心顺序,并且您只需要用相同的整数来替换相同的值,那么有很多方法可以做。一种方法是(代码不准确,但应该演示这个想法):

// setup a map of oldValue to newValue
HashMap<String, Integer> valueMap = ...;
int i = 0;
for (String oldValue : data.values()) {
if ( ! valueMap.contains(oldValue )) {
valueMap.put(oldValue, ++i);
}
}

// replace everything in data
for (Map.Entry<Integer, String> dataEntry : data.entrySet()) {
finalMap.put(dataEntry.getKey(), valueMap.get(dataEntry.getValue());
}

关于java - 替换 hashmap java 中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27240917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com