替换地图中的键,

时间:2014-11-22 22:06:42

标签: 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 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);

}
 }

1 个答案:

答案 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);
    }
}