我需要创建一个 map ,该 map 将缓存第三方查找服务的结果。该请求由两个对象组成,例如timemonth。该映射需要在(time, month)和结果之间进行映射。

我最初的想法是使一个对象将timemonth有效地包装为一个元组对象,因此缓存是此对象与结果之间的映射。

有没有一种更好的方法,而不必在每次需要使用缓存时都将请求包装到元组对象中?

非常感谢。

最佳答案



那是正确的想法。覆盖元组的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);
}

09-06 12:48