我有一个要求,多个枚举需要在 Map<Key,Value>
中找到一个值(枚举的组合将返回一个唯一的值)。
我认为有很多选择,比如让一个包装对象说“Key”,它将充当“Key”。另外,如果键限制为两个(不确定),我们可以使用 Guava Table。
想要检查以下方法,其中两个枚举将映射到唯一的计算值,需要理解建议 -
i) 这种方法可以吗?
ii) 如果是,它是否可扩展?即是否可以轻松使其通用以支持“n”枚举
如 toKey(Enum ...enums)
下面是两个枚举的片段 -
static Integer toKey(Status s, SubStatus ss) {
return Integer.valueOf(s.ordinal() * SubStatus.values().length + ss.ordinal());
}
还有
Status { NONE, PASS, WARN, REJECT }
SubStatus { NONE, SOFT_REJECT, HARD_REJECT }
Integer key1 = toKey(Status.REJECT, SubStatus.HARD_REJECT)
Integer key2 = toKey(Status.WARN, SubStatus.NONE)
then key1 != key2
谢谢!
最佳答案
您可以尝试使用此代码来生成用作 key 的哈希码:
static int toKey(Status s, SubStatus ss) {
final int prime = 31;
int result = 1;
result = prime * result + ((s == null) ? 0 : s.hashCode());
result = prime * result + ((ss == null) ? 0 : ss.hashCode());
return result;
}
由于素数,它应该具有相当强大的抗冲突能力,并且可以扩展以支持 n 个枚举。
关于java - 从多个 Enum 类型为 Map 创建唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31046989/