Замена ключей в картах,

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
    Не совсем понятно, чем ты хочешь, может быть, привести пример кода?
  • 2
    Прежде чем вводить ключ / значения во вторую карту, проверьте, существует ли ключ?
Показать ещё 6 комментариев
Теги:
if-statement
iterator
key-value
map

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню