我制作了一个制作新地图的程序,并从用户那里获取输入并填充地图......
然后我颠倒了地图键/值并用它制作了一张新地图......
我唯一坚持的东西,也就是困难的部分......是检查“值”中是否有重复项,如果是这样的话...我想保留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);
}
}
答案 0 :(得分:1)
最简单的解决方案似乎是在for循环的每次迭代中查看反向映射,看它是否已经有一个带有键valueE
的条目。如果是,请查看keyY
的新潜在值是否较小,如果是这样,请将其放入地图中(通过这样做,您将替换旧值)。
您可以使用Integer.parseInt(whateverString)
将String
值转换为int
进行比较。
最后,如果条目的当前值为null(在此上下文中表示不存在先前的条目),则将新值放入映射中。
所以,就像这样:
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);
}
}