Я сделал программу, которая делает новую карту и берет входные данные от пользователя и заполняет карту...
Затем я перевернул ключи/значения карты и сделал новую карту с ней...
Единственное, за что я застрял, это сложная часть... проверить, есть ли дубликаты в "Значениях", если это так... Я хочу сохранить только 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);
}
}
Самое простое решение, казалось бы, состоит в том, чтобы посмотреть на обратную карту на каждой итерации цикла 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);
}
}