Java 缓存密钥中的通配符
我有一个场景,其中我向一个外部服务发送了3个参数,并期望得到一个结果。我想找到一种优雅的方法来缓存结果 问题是这3个参数之间有层次结构。比如:Java 缓存密钥中的通配符,java,caching,Java,Caching,我有一个场景,其中我向一个外部服务发送了3个参数,并期望得到一个结果。我想找到一种优雅的方法来缓存结果 问题是这3个参数之间有层次结构。比如: 城市 街头 建筑 我希望能够在比“城市”级别更低的级别上缓存通配符。例如: 缓存包含键“NY,*,453”和键“NY,16st,*” 对于参数为“NY,15st,453”的请求是成功的,而对于“NY,15st,444”的请求是失败的 仅使用带有“*”标记通配符的普通对象将导致使用许多“如果”来检查条件。我曾想过重写equals和toString方法,
- 缓存包含键“NY,*,453”和键“NY,16st,*”
- 对于参数为“NY,15st,453”的请求是成功的,而对于“NY,15st,444”的请求是失败的
仅使用带有“*”标记通配符的普通对象将导致使用许多“如果”来检查条件。我曾想过重写
equals
和toString
方法,但我找不到正确的方法。老实说,我认为尝试将其作为简单字符串来执行会非常痛苦
我推荐一种不同的解决方案
作为一名Java开发人员,我无法给出确切的语法,但p代码应该足够接近
class Address {
// Properties.
City: string,
Street: string,
Building: string
}
class Addresses {
Add: List<Address>
public bool GetHit(city, street, building) {
foreach(var add in Add) {
if (add.city == city) && (add.street == street) && (add.building == building) {
return true;
}
}
return false;
}
public bool GetHitByKey(city, street, building) {
// First, check to see if there is a wildcard on the street
if GetHit(city, "*", building) {
return true;
}
if GetHit(city, "*", "*") {
return true;
}
return GetHit(city, street, building);
}
}
类地址{
//财产。
城市:字符串,
街道:弦,
建筑物:字符串
}
班级地址{
Add:列表
公共bool GetHit(城市、街道、建筑){
foreach(变量外接程序外接程序){
如果(add.city==城市)&&(add.street==街道)&&(add.building==大楼){
返回true;
}
}
返回false;
}
公共bool GetHitByKey(城市、街道、建筑){
//首先,检查街道上是否有通配符
如果GetHit(城市,“*”,建筑){
返回true;
}
如果GetHit(城市,“*”,“*”){
返回true;
}
返回GetHit(城市、街道、建筑);
}
}
待办事项:
- 传递一个对象而不是3个参数
- 使用二进制搜索而不是线性搜索