Map< Integer , List< Employee > >
Похоже, вы хотите построить Map< Integer , List< Employee > >
.Клавиша типа Integer
(объект, а не примитив int
) является окладом. значение - это List
сотрудников с этой конкретной зарплатой.
Так что вам нужно создать экземпляр такого Map
, вероятно, HashMap
или, возможно, SortedMap
, например, TreeMap
.Затем, когда вы зацикливаете сотрудников, вы видите, была ли их зарплата уже добавлена в качестве ключа к карте.Если нет, добавьте зарплату в качестве ключа и создайте пустой объект List
в качестве значения.Добавьте этого конкретного сотрудника в новый список.Если зарплата уже присутствует, восстановите список, добавьте сотрудника.
Чтобы составить отчет по ферме, вам нужно найти, на какую ферму был нанят этот сотрудник.Вы зациклите ключи карты, для каждого ключа получите свой список сотрудников, а затем зациклите этих сотрудников.Для каждого сотрудника выполните цикл всех ферм и получите список сотрудников каждой фермы и посмотрите, есть ли целевой сотрудник в этом списке.Если это так, вы знаете ферму сотрудника в списке на карте.
Один недостаток в вашем коде определяет compareTo
для Employee
по зарплате.Интуитивно можно сказать, что не пахнет правильно.Вместо этого у вас должен быть идентификатор для каждого сотрудника, как и в большинстве компаний, каждому сотруднику назначается «идентификатор сотрудника».Ради вашего упражнения я бы просто использовал UUID
в качестве идентификатора.Добавьте поле члена типа UUID
в класс Employee
.Определите compareTo
, используя этот объект.
Поскольку это, очевидно, домашняя работа, я думаю, что сказал достаточно.Вы должны быть в состоянии понять это, следуя моей прозе.Вы также можете выполнить поиск переполнения стека для множества примеров карт со списком в качестве значения и других подобных проблем.
В реальной работе нас, скорее всего, будут интересовать проблемы параллелизма .Но я предполагаю, что это не было задумано как часть вашего школьного задания.
См. Также советы по стилю кодирования, которые я опубликовал как Комментарии к вопросу.