我正在使用电子商务产品。这个电子商务在许多地方都有许多在线商店。对于每个类别,它在不同的商店中具有不同的ID。问题是现在我们想要在同一类产品的商店之间映射类别。
我们在数据库中存储了一个json,其中包含一个国家/地区映射:
[
{
"sg": 4,
"jp": 128,
"ph": 4,
"hk": 4,
"th": null
},
...
]
所以这意味着新加坡的4类别在日本是128。我们其实是 使用这样的结构来映射各国的类别。
我有这个界面来实现这个目标:
public interface CategoryMapper {
int getCategory(String sourceCountry, String destinationCountry, int categoryId);
}
我想优化阅读速度。我应该如何实现这一目标呢?
我有2个选项
由于
答案 0 :(得分:1)
解决此问题的一种方法是创建一个双向映射,如下所示,没有冗余,因为我们不存储对象,因为小字符串是不可变的,例如,单词&#34 ;电子"只存储在内存中一次。
class ProductCategoryMap
{
Map<String,Set<String>> prodMap;
Map<String,String> codeMap;
Map<String,Integer> catMap;
public ProductCategoryMap()
{
prodMap = new HashMap<>();
codeMap = new HashMap<>();
catMap = new HashMap<>();
}
public void put(String category, String region, int code)
{
if(!prodMap.containsKey(category))
{
prodMap.put(category, new TreeSet<>());
}
prodMap.get(category).add(region);
catMap.put(category+region, code);
codeMap.put(region+code, category);
}
public String getCategory(String country, int catId)
{
return codeMap.get(country+catId);
}
public int getCategoryId(String category, String country)
{
return catMap.get(category+country);
}
public int getDestCatId(String srcCountry, String destCountry, int srcCatId)
{
String category = getCategory(srcCountry, srcCatId);
return getCategoryId(category, destCountry);
}
public TreeSet<String> getAvailability(String category)
{
return prodMap.get(category);
}
}
答案 1 :(得分:0)
您可以使用HashMaps的HashMap执行以下操作:
Map<String, Map<String, Integer>> map = new HashMap<String, Map<String, Integer>>();
第一个键(外部地图的键)是类别名称(例如电子设备),第二个键(内部地图的键)是位置名称。
这样您就可以通过2次HashMap访问有效地获取任何id。
您可以使用LinkedHashMap
中的// setup browser
var options = {
desiredCapabilities: {
browserName: 'chrome',
chromeOptions: {
args: ['user-data-dir=C:/Users/Administrator/AppData/Local/Google/Chrome/User Data/Profile 21v69',
'--lang=en']
} // chromeOptions: {
} // desiredCapabilities: {
} // options = {
var client = webdriverio.remote(options).init();
来限制HashMap大小,使其成为LRU(或任何其他策略)缓存。
除此之外,您可以使用Java缓存框架,如EHCache或OSCache。