Java 是否可以创建一个哈希映射,其中每个值都是一个对对象作用不同的方法

Java 是否可以创建一个哈希映射,其中每个值都是一个对对象作用不同的方法,java,hashmap,time-complexity,state,Java,Hashmap,Time Complexity,State,问题 我想知道如果我能创建一个包含所有方法的状态机,并且MethodById的值将在机器中声明,这是否可行 还有,这是我第一个问题。如果我做错了,我很抱歉,但这就是原因 说明(TL;DR) 我正试图交叉参考有关销售代表的数据。每个代表都有邮政编码指定的地区 一个数据集包含销售代表、他们的地区和他们的公司。 另一个数据集有他们的姓名、电话号码和电子邮件 我创建了一个Sales rep类,该类从第一个数据集获取数据,需要使用第二个数据集进行更新。 我还需要将销售代表放入的查找表中(我使用了hash

问题

我想知道如果我能创建一个包含所有方法的
状态机
,并且
MethodById
的值将在机器中声明,这是否可行

还有,这是我第一个问题。如果我做错了,我很抱歉,但这就是原因


说明(TL;DR)

我正试图交叉参考有关销售代表的数据。每个代表都有邮政编码指定的地区

一个数据集包含销售代表、他们的地区和他们的公司。 另一个数据集有他们的姓名、电话号码和电子邮件

我创建了一个Sales rep类,该类从第一个数据集获取数据,需要使用第二个数据集进行更新。 我还需要将销售代表放入
的查找表中(我使用了hashmap

我希望每个销售代表对象都有一个
ID
,这是我所有数据集的标准。我不能使用提供给我的数据,因为它来自许多不同的来源,而且不可能标准化任何数据字段

例如,名称的列出方式多种多样,因此不可能协调它们并将其用作
ID

如果我能得到像这样的
ID
(类似于SSN但不太敏感),那么我想试试我的问题是关于什么的

我想迭代我的hashmap中的所有元素,我们称之为RepsByZipCode。当我遍历每个Salesrep对象时,我希望得到一个
ID
,我可以在另一个名为
MethodById
的hashmap中使用它

我希望它对具有匹配键(即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
//SalesRep对象构造函数:
SalesRep(字符串名称、字符串电子邮件、…、字符串Id)
Map RepsByZipCode=newhashmap{}
//代码使用第一个数据集填充上述内容
Map MethodById=新HashMap{}
//代码用第二个数据集填充上述内容
for(字符串ZipKey:RepsByZipCode){
salesreprep=RepsByZipCode.get(ZipKey);
Rep.getId=ID;
MethodById.get(ID);
//每次运行时,RepsByZipCode中的一个条目都会更新为一个条目
//方法从MethodById。
//在此for循环之后,所有RepsByZipCode都已在线性时间内更新


您可以将这些方法放入实现公共接口的不同类中,并在映射中存储每个类的实例。如果您至少使用Java 8,并且您的方法足够简单,您可以使用它来避免一些样板文件。

您可以将这些方法放入实现公共接口的不同类中,例如d在映射中存储每个类的一个实例。如果您至少使用Java 8,并且您的方法足够简单,您可以使用它来避免一些样板文件。

在我看来,您可以创建一个字符串,并将您的方法名称存储在其中,然后在使用它时,您需要在方法中创建它,然后将您的参数传递给它。好吗如何使用包含方法名的字符串来实际运行该方法?我很困惑,因为对我来说,这似乎只是存储一个字符串。我不知道在需要时,您实际如何运行该方法。您有函数名,可以通过附加“()”来解析方法中的名称然后传递参数不要存储字符串。存储使用者或函数的实例。我看到的方式是,您可以创建一个字符串并在其中存储方法名称,然后在使用它时,您需要在方法中创建它,然后将参数传递给它。好吗?您能告诉我如何使用包含方法名称的字符串来运行那个方法?我很困惑,因为在我看来,这就像是在存储一个字符串。我不知道在需要的时候,你会如何运行这个方法。你有函数名,你可以通过附加“()”来解析方法中的名称然后传递参数。不要存储字符串。存储使用者或函数或方法引用的实例。我试图避免为每个引用创建单独的类,因为我确实需要基于交叉引用的数据集更新Sales Rep对象信息的方法。例如,我想用Id=1,名称为“bob”,因此我希望该方法类似于Object.setname(“bob”)。我还希望能够找到数据集之间的Id匹配,并相应地更新类属性。你能给我看一个lambda的示例吗?你的意思是?我以前经常使用它们,但我在学校的记忆很差。无论如何,你会将这些其他对象传递到这些方法中,如果这些方法是类的一部分,它们仍然是参数坦率地说,我不明白你的意思。如果我为每个方法创建了一个类并将其存储在哈希映射中,我不就是在存储一个类对象,其中包含一个方法吗?我不明白你如何“存储”一个lambda表达式虽然我认为你使用它们是对的,因为这基本上就是我需要的,一个代码简短的函数接口。我只是不理解“存储在哈希映射部分”因为对我来说,这就像是名词和动词之间的区别。我可以存储名词,但不能存储动词。是的,对于每个不同的行为,您都会有不同的类实现,例如,一些
IdHandler
接口与
handleId()
方法。您需要