Ну, проблема, которую вы видите
Метод put (Integer, Map) в типе Map не применим для аргументов (Integer, Double)
потому что ваша строка вставляется в retailPrices
имеет
(new Integer(oResult.getString("AREA")))
в качестве ключа (Integer
), но
pegPlPrices.put(new Integer(...), new Double(...))
в качестве значения.
Подпись метода put
в типе Map
:
V put(K key, V value)
Вы предполагали, что она вернула саму карту, но на самом деле она возвращает значение , которое вы помещаете в нее. Таким образом, тип pegPlPrices.put(Integer, Double)
равен Double
.
Объединение всего этого означает, что вы пытаетесь сделать это:
retailPrices.put(Integer, Double)
Вы должны разбить свою строку на две части:
// do the put on pegPlPrices
pegPlPrices.put(new Integer(oResult.getString("ZONE_CODE")), new Double(oResult.getString("VALUE"))
// now add pegPlPrices into your map
retailPrices.put((new Integer(oResult.getString("AREA"))), pegPlPrices));
и это должно исправить это для вас
Я думаю, что выбранная вами структура, однако, не подходит для этого. Если каждый из ваших кодов зон имеет внутреннее и собственное значение, которое не отделено от него, вы можете захотеть превратить код зоны в класс или в Enum, в котором значение является частным членом. Тогда вы сможете избавиться от 1 уровня Map
с.
Отредактировано для добавления скелета Enum для значения зоны
Если вы хотите посмотреть, каким будет Enum for Zone-Value, вот пример:
public enum Zone
{
private Integer zoneCode;
private Double value;
ZONE1( /* Integer, Double */ ),
ZONE2( /* Integer, Double */ );
public Integer getZone()
{
return zoneCode;
}
public Double getValue()
{
return value;
}
private Zone(Integer z, Double v)
{
zoneCode = z;
value = v;
}
}