Java 替换地图中的键,
我已经做了一个程序,使一个新的地图,并采取从用户的输入,并填写地图 然后我反转了贴图键/值,并用它制作了一个新的贴图 我唯一要做的就是,最难的部分。。。检查“值”中是否有重复项,如果有。。。我只想保留与其键的较小值相对应的1。。。 例如,如果我有12=13,8=13,我想把8=13放在我的第二个倒转贴图中,然后去掉12=13Java 替换地图中的键,,java,if-statement,map,iterator,key-value,Java,If Statement,Map,Iterator,Key Value,我已经做了一个程序,使一个新的地图,并采取从用户的输入,并填写地图 然后我反转了贴图键/值,并用它制作了一个新的贴图 我唯一要做的就是,最难的部分。。。检查“值”中是否有重复项,如果有。。。我只想保留与其键的较小值相对应的1。。。 例如,如果我有12=13,8=13,我想把8=13放在我的第二个倒转贴图中,然后去掉12=13 public class { public static void main(String[] args) { PrintStream output = new P
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);
}
}
公共类
{
公共静态void main(字符串[]args)
{
PrintStream输出=新的PrintStream(System.out);
扫描仪输入=新扫描仪(System.in);
Map normal=新的HashMap();
println(“输入地图,每行一个键值对,”);
println(“逗号分隔。使用空行作为哨兵”);
对于(String entry=input.nextLine();entry.length()!=0;
entry=input.nextLine())
{
int逗号=entry.indexOf(“,”);
String key=entry.substring(0,逗号);
字符串值=entry.substring(逗号+1);
正常。输入(键、值);
}
输出println(正常);
Map reverse=新的HashMap();
对于(Map.Entry:normal.entrySet())
{
字符串keyY=entry.getKey();
字符串valueE=entry.getValue();
反向放置(valueE,keyY);
}
输出。打印项次(反向);
}
}
最简单的解决方案似乎是在for循环的每次迭代中查看反向映射,看看它是否已经有一个带有键valueE
的条目。如果是,请查看keyY
的新潜在值是否较小,如果较小,请将其放入地图中(这样做将替换旧值)
您可以使用Integer.parseInt(whateverString)
将字符串
值转换为int
s进行比较
最后,如果条目的当前值为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);
}
}
import java.util.*;
导入java.io.PrintStream;
公共类KeyValueSwitcher{
公共静态void main(字符串[]args){
PrintStream输出=新的PrintStream(System.out);
扫描仪输入=新扫描仪(System.in);
Mapnormal=新HashMap();
println(“输入地图,每行一个键值对,”);
println(“逗号分隔。使用空行作为哨兵”);
对于(String entry=input.nextLine();entry.length()!=0;
entry=input.nextLine()){
int逗号=entry.indexOf(“,”);
String key=entry.substring(0,逗号);
字符串值=entry.substring(逗号+1);
正常。输入(键、值);
}
输出println(正常);
Mapreverse=新HashMap();
对于(Map.Entryentry:normal.entrySet()){
字符串keyY=entry.getKey();
字符串valueE=entry.getValue();
//检查是否已将此密钥的条目放入反向映射中。
字符串existingreverseevalue=reverse.get(valueE);
如果(existingReverseValue!=null){
//我们有,让我们看看这个值是大还是小
int currentValue=Integer.parseInt(现有反向值);
int-potentialNewValue=Integer.parseInt(keyY);
if(潜在新值<当前值){
//旧的反向值更大,因此替换为新的反向值
反向放置(valueE,keyY);
}
}否则{
//不存在以前的反向值,因此请添加新的反向值
反向放置(valueE,keyY);
}
}
输出。打印项次(反向);
}
}
不太清楚您想要什么,也许可以给出一个代码示例?在第二个映射中输入键/值之前,请检查键是否已经存在?抱歉,这是代码..我有点困惑--您希望将键值项保留在键较小的位置,就像它是一个数字一样。但是你使用的不是地图,而是地图。如果您的地图存储字符串,则无法保证您的密钥可以转换为数字。如果不是“8”=“13”和“12”=“13”,而是“hello”=“13”和“hi”=“13”呢?你想保留哪一个?或者你真的想用数字地图而不是字符串地图吗?@TJamesBoone说实话,我应该用地图,但我真的不知道如何从用户那里获取输入。。。使用字符串可以搜索逗号和您知道的2个数字。。我肯定有办法,但我想不出来,所以我在书上写下了这个方法。所以输入肯定是数字,肯定会有重复的值。。。我首先需要确定值的重复项(我试着用getValues()这样做,结果成功了),但是我无法替换coresponding键smaller键:(我搜索了整个API。。。