Сопоставление списка идентификаторов с соответствующими им объектами - PullRequest
0 голосов
/ 03 июля 2011

У меня есть Dictionary<int BossID, string BossName> ListOfBosses и Dictionary<String EmpName, int BossID> ListOfEmps. Конечно, сопоставьте BossID с Боссом и верните «Словарь WhoIsMyBoss».

Понятия не имею, с чего начать на Java.

Что касается двух списков, мы предположим, что между Боссами и Эмперами будет соотношение один к многим. И BossID являются инкрементными от 1-н.

Я полагаю, что я сделал бы следующее в моей неграмотной Java. , .

Dictionary<BossName, EmpName> WhoIsMyBoss;
ArrayList<Integer> AnotherListOfBosses;
private int Boss;
for (String EmpName: ListOfEmps)
        Boss = ListOfEmps.get(EmpName)
        WhoIsMyBoss.put(ListofBosses(Boss) , EmpName);
        AnotherListOfBosses.add(Boss);
}
for(int Boss: AnotherListOfBosses)
{
     ListOfBosses.remove(Boss)
}

Это должно оставить мне список боссов и сотрудников и надеюсь, ListOfBosses без соответствующих сотрудников.

Как это выглядит? Является ли Словарь правильной коллекцией для использования? Любые улучшения будут с благодарностью.

Ответы [ 3 ]

1 голос
/ 03 июля 2011

Будем весьма благодарны за любые улучшения.

Вам необходимо изучить правила стиля Java для идентификаторов.

  • Имена классов начинаются с верблюдасимвол верхнего регистра.
  • Имена методов и имена переменных, параметров и атрибутов указываются в регистре верблюдов, начиная с символа нижнего регистра.
  • Все имена пакетов строчные
  • Константа (например, static final переменные) имена имеют заглавные буквы с подчеркиваниями в качестве разделителей имен.
1 голос
/ 03 июля 2011

Как упоминал Килиан Фот, вы должны использовать карту вместо Dictionary. Кроме того, в Java принято начинать имена переменных со строчной буквы и заглавной буквы имени класса.

Вы сказали, что имена - это строки и идентификаторы целых чисел.

public class BossExample {
  // Key: Boss-ID, Value: Boss name
  private Map<Integer, String> mapOfBosses = new HashMap<Integer, String>();

  // Key: Emp name, Value: Boss-ID
  private Map<String, Integer> mapOfEmps = new HashMap<String, Integer>();

  // Constructor fills the maps
  public BossExample() {
    // ...
  }

  // Returns a mapping from Emp name to Boss name
  public Map<String, String> getEmpToBossMap() {
    final Map<String, String> empToBossMap = new HashMap<String, String>();

    // Iterate through mapOfEmps via entrySet giving you key and value 
    // at the same time
    for(Map.Entry<String, Integer> empEntry : mapOfEmps.entrySet()) {
      // Put the Emp name as key and the retrieved Boss name as a value into 
      // the result map.
      empToBossMap.put(empEntry.getKey(), mapOfBosses.get(empEntry.getValue()));
    }

    return empToBossMap;
  }
}
1 голос
/ 03 июля 2011

Dictionary устарел, поэтому вместо него следует использовать какой-то Map (обычно HashMap). Кроме того, вызов ваших переменных ...List очень вводит в заблуждение, поскольку существует чрезвычайно распространенный тип коллекций, называемый List, и он делает что-то другое (представляет порядок, но не отображение), поэтому вам, вероятно, следует вызывать переменные ...map а также.

Поскольку у одного начальника может быть несколько сотрудников, сопоставление должно быть от сотрудника к начальнику, а не наоборот (ключ всегда называется первым). Соответствующий put также является неправильным путем.

Существуют также некоторые другие проблемы с отсутствующими объявлениями и отсутствующими get(), но компилятор должен прямо указать вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...