我需要在Java中创建一个查找表,以便根据多个参数返回一个值。
例如:
['THE VALUE I NEED', 'PARAM A', 'PARAM B' ,'PARAM C']
所以基于3个参数PARAM A,B。C,我需要检索一个值。
我正在考虑使用Enum执行此操作,但可以复制相同的密钥,例如:
[RESULT 1, 'A' , 'B', 'C']
[RESULT 1, 'C' , 'B', 'C']
[RESULT 2, 'B' , 'C', 'A']
在Java中实现此查找表的最佳方法是什么,允许使用不同参数配置的重复键?
答案 0 :(得分:1)
如果你的变量/参数是静态的,你可以坚持使用枚举:
public enum LookupElement{
ELEM_1("A","B","C", 1),
ELEM_2("C","B","C", 1),
ELEM_3("B","C","A", 2);
private final String a;
private final String b;
private final String c;
private final int value;
LookupElement(String a, String b, String c, int v){
this.a = a;
this.b = b;
this.c = c;
this.value = v;
}
public static LookupElement getByValue(int v){
for(LookupElement e : values()){
if(e.value == v) return e;
}
return null;
}
public static LookupElement getByParams(String a, String b, String c){
for(LookupElement e : values()){
if(e.a.equals(a) && e.b.equals(b) && e.c.equals(c)) return e;
}
return null;
}
}
答案 1 :(得分:1)
如果您需要一个比枚举更灵活的解决方案,您可以使用嵌套类和Map。
这里的关键是创建自己的轻量级数据类,在这种情况下Data
将包围您要映射的值,a
,b
和{{1 }} 这里。您需要覆盖c
和equals
函数以合并所有字段。另外,我建议制作这些字段hashCode
。对这些字段的更改不会自动更新final
,并可能产生意外结果。如果您需要创建一次此查找表,您可能希望将结果映射包装在HashTable
中,以阻止任何类意外修改基础集合。
Collections.unmodifiableMap
public static void main(String... args) {
Map<Data, String> map = new HashMap<>();
map.put(new Data("1", "A", "B"), "Value A");
map.put(new Data("2", "F", "£"), "Value B");
map.put(new Data("D", "A", "B"), "Value C");
map.get(new Data("1", "A", "B")); // "Value A"
}
上课:
Data