如何将嵌套的哈希映射键(字符串)转换为double

时间:2014-06-12 20:38:37

标签: java hashmap nested

我有一个嵌套的哈希映射,我不知道如何将密钥转换为double。我必须转换它们,因为稍后我必须做一些计算。无论如何转换他们。我这样做的原因是因为我想将三个元素映射在一起:半径,θ和振幅。当我从一个特定格式的图像中读取它时,我想在哈希映射中保存它(我发现它最方便,因为它映射出元素)。所以我尝试了列表和数组列表,但我无法保存三个元素,所以我使用了嵌套的哈希映射。

这是我的代码:

    // create a Map()
    original = new LinkedHashMap<List<RadTheta>,String>();
    List<RadTheta> list = new ArrayList<RadTheta>();
    // create a Map()

    for(int i =0; i< 256;i++){
         for(int y=0; y< 256; y++){

            //reading in the values.
            String x = image.getLocationAsString(i, y);
            String n = image.getValueAsString(i, y);

            //Parsing them into "key" and "value".
            String delim = ", value=";
            String [] tokens = n.split(delim);
            double num = Double.parseDouble(tokens[1]);
            String stringNum = String.valueOf(num);
            //System.out.println(num);

            String [] t = x.split("r=");
            String[] b = t[1].split(" mm/c");
            //System.out.print("Meet b:    "+b[0]);
            double radius = Double.parseDouble(b[0]);
            String stringRad = String.valueOf(radius);
            //System.out.print("The radius:   "+radius);

            String [] split = x.split("theta= ");
            String [] split2 = split[1].split(Character.toString(IJ.degreeSymbol));
            double theta = Double.parseDouble(split2[0]);
            //System.out.println("  theta: "+theta);
            String stringTheta = String.valueOf(theta);

            RadTheta rad = new RadTheta(radius, theta);
            list.add(rad);
            original.put(list, stringNum);

            //System.out.println(stringRad+"  theta= "+stringTheta+"  value= "+stringNum);



         }
    }

这里我迭代哈希映射,我想将键(radius,theta)值转换为double,因为我已经对它们进行了一些计算。有没有办法转换它?

  public void outputData(PrintWriter write){
    write.println("Radius" +"  Theta  "+"  Amplitude");
    saveData();
    Iterator iter = original.entrySet().iterator();

    while(iter.hasNext()){
        Map.Entry pairs = (Map.Entry)iter.next();

            //This is the problem-------------------------------
        double currKey = Double.parseDouble(pairs.getKey());
        double currValue = Double.parseDouble((String) pairs.getValue());
        write.println(currKey +"    "+currValue);

        System.out.println(pairs.getKey() + " = "+ pairs.getValue());
    }
}

2 个答案:

答案 0 :(得分:2)

您应该创建一个包含3个双打的类,并使用该类的列表:

class Value {
  double theta;
  double radius;
  double amp;
}

List<Value> values = new ArrayList();

// fill list with values
for (Value val: values) {
  System.out.println("Theta="+val.theta+", Radius="+val.radius+", Amp="+val.amp);
}

答案 1 :(得分:0)

只需转换地图中的键和值,就可以看出你正在做什么。这是一个非常简单的代码片段,就像你想要做的那样。

public static void main(String[] args) {
        Map<String, String> myMap = new HashMap<String, String>();

        myMap.put("1.123456", "-1.123456");
        myMap.put("2.123456", "-2.123456");

        for(String keys : myMap.keySet()){

            double keyDouble = Double.parseDouble(keys);
            double valueDouble = Double.parseDouble(myMap.get(keys));

            System.out.println(String.format("Key: %f Value: %f", keyDouble, valueDouble));
        }
    }

如果您的工作不正常,可以发布错误吗?另请遵循评论中关于不使用地图作为关键字的建议。