在地图更换钥匙,
问题描述:
我做了一个程序,使一个新的地图,从用户获取输入,并填补了地图...在地图更换钥匙,
然后我倒在地图键/值,并提出了新的地图它...
我坚持的唯一的东西,这是困难的部分...是检查是否有重复的“价值观”,如果是这样的话......我想只保留1对应于其关键字的较小值... 如果我有例如,12 = 13,8 = 13,我想把8 = 13放在我的第二个倒转映射中,并删除12 = 13。
public class
{
public static void main(String[] args)
{
PrintStream output = new PrintStream(System.out);
Scanner input = new Scanner(System.in);
Map<String,String> normal = new HashMap<String,String>();
output.println("Enter your map, one key-value pair per line,");
output.println("comma-separated. Use empty line as sentinel.");
for (String entry = input.nextLine(); entry.length() !=0;
entry = input.nextLine())
{
int comma = entry.indexOf(",");
String key = entry.substring(0,comma);
String value = entry.substring(comma+1);
normal.put(key,value);
}
output.println(normal);
Map<String,String> reverse = new HashMap<String,String>();
for (Map.Entry<String,String> entry : normal.entrySet())
{
String keyY = entry.getKey();
String valueE = entry.getValue();
reverse.put(valueE,keyY);
}
output.println(reverse);
}
}
答
最简单的解决方案似乎是看在for循环的每个迭代反向映射,看它是否已经在它的关键valueE
的条目。如果是,请查看keyY
的新潜在值是否较小,如果是,则将其放在地图中(通过这样做,您将替换旧值)。
您可以使用Integer.parseInt(whateverString)
将String
的值转换为int
以供比较。
最后,如果条目的当前值为空(在此上下文中意味着没有先前条目存在),则将新值放入映射中。
所以,像这样:
import java.util.*;
import java.io.PrintStream;
public class KeyValueSwitcher {
public static void main(String[]args) {
PrintStream output=new PrintStream(System.out);
Scanner input=new Scanner(System.in);
Map<String, String>normal=new HashMap<String, String>();
output.println("Enter your map, one key-value pair per line,");
output.println("comma-separated. Use empty line as sentinel.");
for(String entry=input.nextLine();entry.length()!=0;
entry=input.nextLine()) {
int comma=entry.indexOf(",");
String key=entry.substring(0,comma);
String value=entry.substring(comma+1);
normal.put(key,value);
}
output.println(normal);
Map<String, String>reverse=new HashMap<String, String>();
for(Map.Entry<String, String>entry:normal.entrySet()) {
String keyY=entry.getKey();
String valueE=entry.getValue();
// check to see if we've already put an entry in the reverse map for this key.
String existingReverseValue = reverse.get(valueE);
if(existingReverseValue != null) {
// We have, so let's see if the value is greater or less
int currentValue = Integer.parseInt(existingReverseValue);
int potentialNewValue = Integer.parseInt(keyY);
if(potentialNewValue < currentValue) {
// Old reverse value is greater, so replace with new reverse value
reverse.put(valueE, keyY);
}
} else {
// No previous reverse value exists, so add new reverse value
reverse.put(valueE,keyY);
}
}
output.println(reverse);
}
}
这是不是真的清楚你wan't什么,也许给一个代码示例? – hY8vVpf3tyR57Xib 2014-11-22 22:09:47
在第二个Map中输入一个键/值之前,检查该键是否已经存在? – fishinear 2014-11-22 22:10:13
我的歉意,这里是代码.. – 2014-11-22 22:21:32