2014-11-22 79 views
1

我做了一个程序,使一个新的地图,从用户获取输入,并填补了地图...在地图更换钥匙,

然后我倒在地图键/值,并提出了新的地图它...

我坚持的唯一的东西,这是困难的部分...是检查是否有重复的“价值观”,如果是这样的话......我想只保留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

这是不是真的清楚你wan't什么,也许给一个代码示例? – hY8vVpf3tyR57Xib 2014-11-22 22:09:47

+2

在第二个Map中输入一个键/值之前,检查该键是否已经存在? – fishinear 2014-11-22 22:10:13

+0

我的歉意,这里是代码.. – 2014-11-22 22:21:32

回答

1

最简单的解决方案似乎是看在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); 
    } 
}