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