Можно ли создать хэш-карту, где каждое значение является методом, который по-разному действует на объект - PullRequest
0 голосов
/ 25 июня 2018

Проблема

Я хочу знать, возможно ли это, если бы я мог создать State machine, который будет содержать все методы, а значения MethodById будут указаны вмашина.

PS это мой первый вопрос здесь.Если я делаю это неправильно, извините, но именно поэтому.


Описание (TL; DR)

Я пытаюсь сопоставить данные оТорговые представители.Каждый представитель имеет территорий , указанных почтовыми индексами .

В одном наборе данных есть представители, их территории и их компания.Другой набор данных имеет свои имена, номер телефона и адрес электронной почты.

Я создал класс Sales-rep, который берет из первого набора данных и должен быть обновлен вторым набором данных.Мне также нужно, чтобы торговые представители были помещены в справочную таблицу (для этого я использовал hashmap ) <key: zip code, value: Sales-rep object>.

То, что я хочу, это для каждого торгового представителявозражать против наличия ID, стандартного для всех моих наборов данных.Я не могу использовать данные, которые мне предоставляют, потому что они поступают из разных источников и невозможно стандартизировать любое поле данных.

Имена, например, перечислены так много разных способов, что было бы невозможно согласовать их и использовать это как ID.

Если я смогу получить ID, как это (что-то вроде SSN, но менее чувствительное) тогда я хочу попробовать, о чем мой вопрос.

Я хочу перебрать все элементы в моем <key: zip code, value: Sales-rep object> hashmap , мы назовем его RepsByZipCode.Когда я перебираю каждый Salesrep объект , я хочу получить ID, который я могу использовать в другой хэш-карте под названием MethodById <key: ID, value: a method run on the Object with this ID>.

Я хочу, чтобы он запускал другой метод для каждого ключа на объекте с соответствующим ключом (AKA ID).Задача состоит в том, чтобы запустить разные методы для каждого отдельного объекта в линейное время, чтобы к концу цикла for для каждого объекта в RepsByZipCode был запущен какой-либо метод, который может обновлять информацию (таким образом завершая перекрестные ссылки),

Это также делает код очень расширяемым, потому что я могу изменить метод для каждого ключа, если я хочу обновить вещи по-разному.Пример:

//SalesRep Object Constructor:
SalesRep(String name, String email, ..., String Id)

Map<String zipcode, Salesrep rep> RepsByZipCode = new HashMap<>{}
//code fills in the above with the first dataset
Map<String ID, ??? method> MethodById = new HashMap<>{}
//code fills in the above with the second dataset

for(String ZipKey:RepsByZipCode){
    Salesrep Rep = RepsByZipCode.get(ZipKey);
    Rep.getId = ID;
    MethodById.get(ID);
    //each time this runs, one entry in RepsByZipCode is updated with one 
    //method from MethodById.
//after this for loop, all of RepsByZipCode has been updated in linear time

1 Ответ

0 голосов
/ 25 июня 2018

Вы можете поместить эти методы в разные классы, которые реализуют общий интерфейс, и сохранить экземпляр каждого класса на вашей карте.Если вы используете хотя бы Java 8 и ваши методы достаточно просты, вы можете использовать lambdas , чтобы избежать некоторого шаблона.

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