我需要创建一个 map ,该 map 将缓存第三方查找服务的结果。该请求由两个对象组成,例如time
和month
。该映射需要在(time, month)
和结果之间进行映射。
我最初的想法是使一个对象将time
和month
有效地包装为一个元组对象,因此缓存是此对象与结果之间的映射。
有没有一种更好的方法,而不必在每次需要使用缓存时都将请求包装到元组对象中?
非常感谢。
最佳答案
那是正确的想法。覆盖元组的hashCode()
和equals(Object)
以使其与HashMap<TimeMonthTuple>
一起使用,或compareTo(TimeMonthTuple)
使其与TreeMap<TimeMonthTuple>
一起使用
这是最直接的方法,除非您有一个可以用有意义的东西替换TimeMonthTuple
的类。例如,时间和日期可以组合成Date
对象。
在某些情况下,您可以基于原始包装器创建 key 。例如,如果将time
表示为自午夜以来的分钟数,并且month
是介于1和12之间(包括1和12)的数字,则可以将这两个值都包装为Integer
,并将其用作键:
Integer makeTimeMonthKey(int time, int month) {
return (time * 12) + (month - 1);
}