Я хотел бы предложить другое, надеюсь, более читаемое решение:
public class PriceMap {
private Map<Integer, Map<Integer, Double>> priceMap =
new HashMap<Integer, Map<Integer, Double>>();
// You'd use this method in your init
public Double setPrice(Integer areaCode, Integer zoneCode, Double price) {
if (!priceMap.containsKey(zoneCode)) {
priceMap.put(zoneCode, new HashMap<Integer, Double>());
}
Map<Integer, Double> areaMap = priceMap.get(zoneCode);
areaMap.put(areaCode, price);
}
public void getPrice(Integer areaCode, Integer zoneCode) {
if (!priceMap.containsKey(zoneCode)) {
// Eek! Exception or return null?
}
Map<Integer, Double> areaMap = priceMap.get(zoneCode);
return areaMap.get(areaCode);
}
}
Я думаю, что это лучшая, более читаемая абстракция, которая, что очень важно, облегчит вам или кому-то еще чтение через несколько месяцев.
РЕДАКТИРОВАТЬ Добавлено get get
Если вы застряли с get (areaCode) .get (zoneCode) (заказ в обратном порядке), но myBean полностью принадлежит вам, вы можете сделать что-то вроде:
public class MyBean {
// I suppose you have this already
private final Map<Integer, Map<Integer, Double>> priceMap =
new HashMap<Integer, Map<Integer, Double>>();
private class LooksLikeAMap implements Map<Integer, Double> {
private Integer areaCode = areaCode;
public LooksLikeAMap(Integer areaCode) {
this.areaCode = areaCode;
}
public Double get(Object zoneCode) {
if (!priceMap.containsKey(zoneCode)) {
// Eek! Exception or return null?
}
Map<Integer, Double> areaMap = priceMap.get(zoneCode);
return areaMap.get(areaCode);
}
// Implement other methods similarly
}
public Map<Integer, Double> get(Integer areaCode) {
return new LooksLikeAMap(areaCode);
}
}
Хорошо, программирование в текстовой области HTML - не моя сильная сторона, но идея ясна.
Создайте некоторую структуру, подобную Map, подкрепленную полным набором данных, и инициализируйте ее
Структура карты с требуемым AreaCode.
Если идея не ясна, оставьте комментарий быстро, так как уже поздно здесь:)
EDIT
Я идиот. Я думал, что данные были сначала зоной, затем областью, в то время как get должен быть сначала областью, а затем зоной. В этом случае карта уже имеет правильную структуру, сначала область, а затем зону, поэтому в этом нет необходимости. Get-get по умолчанию, если вы сделаете
public MyBean {
public Map<Integer, Double> get(Integer areaCode) {
return data.get(areaCode);
}
}