Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何访问包含在映射中的列表中的元素?_Java_List_Map - Fatal编程技术网

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

Java 如何访问包含在映射中的列表中的元素?,java,list,map,Java,List,Map,我试图访问存储在映射中的列表中的某些元素。地图中的关键点是双精度的。我试图访问的列表包含一个double和一个map。下面的代码是我尝试获取存储在列表中的double,以及访问列表中包含的映射的代码。下面的代码中有3个错误,我不知道如何解决。任何帮助都很好,谢谢 private Map<Double,List<Object>> prediction = new HashMap<Double,List<Object>>(); // previous

我试图访问存储在映射中的列表中的某些元素。地图中的关键点是双精度的。我试图访问的列表包含一个double和一个map。下面的代码是我尝试获取存储在列表中的double,以及访问列表中包含的映射的代码。下面的代码中有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
                    }
            }
}
private Map prediction=new HashMap();
//previous是用户输入的双精度值
if(预测容器(上一个)){
列表l1=新的ArrayList();
l1.add(0,(double)l1.get(0)+1.0);//在索引0处添加double 1
Map m2=新的HashMap();
l1.添加(m2);//将映射添加到索引1处的列表中
prediction.put(上一个,l1);
}
公共双预测(双值){
if(预测容器(值)){
double total=prediction.get(value).get(0);//错误无法将对象转换为double
Map items=prediction.get(value).get(1);//错误无法将对象转换为Map

对于(double i=0;i未经测试,但我认为您可以投射值:

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; 
    }
}
if(prediction.containsKey(value)){
双重总计=(双重)预测。获取(值)。获取(0);
映射项=(映射)预测.get(值).get(1);
for(double i=0;i
prediction.get(value)
返回一个
列表
。因此
prediction.get(value).get(0)
返回一个
对象
:您需要将其强制转换为
double
,并提取双精度值:

double total = ((Double)prediction.get(value).get(0)).doubleValue();
与第二个相同:您必须强制转换到地图:

Map items = (Map)prediction.get(value).get(1);
第三个也一样:

double a = ((Double)items.get(i)).doubleValue()/total; 

使用
List
,而不是
List
。列表中同时包含一个double和一个map。@jjohnst:这是一种明确的代码气味。听起来,使用一个带有
double
字段和
map
字段的类型比将所有内容都保存在一个非类型化的
列表中要有效得多。map和double都需要但是,在预测映射中存储在同一个键上。我建议使用对象包装器-
map
(只是不要这样称呼它).是的,我试图避免强制转换它,因为它的形式不好,但它确实有效。我将研究如何拆分它。我只是不想创建很多对象,因为此代码处于循环中,将运行1000次。