我试图访问存储在地图中包含的列表中的一些元素。地图中的键是双打的。我尝试访问的列表包含double和map。下面的代码是我尝试获取存储在列表中的双精度,以及访问列表中包含的映射。下面的代码中有3个错误,我不知道如何解决。任何帮助都会非常感谢。
private Map<Double,List<Object>> prediction = new HashMap<Double,List<Object>>();
// previous is a double that the user inputs
if(prediction.containsKey(previous)){
List<Object> l1 = new ArrayList<>();
l1.add(0,(double)l1.get(0)+1.0); // add double 1 at index 0
Map<Double,Double> m2 = new HashMap<Double,Double>();
l1.add(m2); // add map to list at index 1
prediction.put(previous,l1);
}
public double predict(double value){
if (prediction.containsKey(value)){
double total = prediction.get(value).get(0); //ERROR can't convert Object to double
Map items = prediction.get(value).get(1); //ERROR can't convert Object to Map
for (double i=0; i<=items.size();i++){ //iterate through Map
double a = items.get(i)/total; //ERROR can't divide object by double
}
}
}
答案 0 :(得分:1)
prediction.get(value)
返回List<Object>
。因此prediction.get(value).get(0)
会返回Object
:您需要将其转换为Double
并提取双值:
double total = ((Double)prediction.get(value).get(0)).doubleValue();
与第二个相同:你必须转换为Map:
Map items = (Map)prediction.get(value).get(1);
第三个也一样:
double a = ((Double)items.get(i)).doubleValue()/total;
答案 1 :(得分:0)
未经测试,但我认为您可以投射值:
if (prediction.containsKey(value)){
double total = (Double) prediction.get(value).get(0);
Map items = (Map) prediction.get(value).get(1);
for (double i=0; i<=items.size();i++) {
double a = ((Double) items.get(i)) / total;
}
}
但这不是很干净的代码风格。尝试将Map拆分为两个地图。一个包含Double,一个包含Maps