如何访问映射中包含的列表中的元素?

时间:2013-06-05 20:22:03

标签: java list map

我试图访问存储在地图中包含的列表中的一些元素。地图中的键是双打的。我尝试访问的列表包含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
                    }
            }
}

2 个答案:

答案 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