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