如何在多地图中添加值

时间:2014-06-10 16:42:58

标签: java multimap

即使看过这个问题,我似乎无法弄明白:Adding values of two maps whenever there is a key match。我做了一个多图,包含半径作为键,幅度作为值。但是有重复的密钥。所以我想遍历整个地图,如果有重复的键,我想添加这些键的值。我已经尝试将它添加到新地图或双重总和,但我似乎无法让它工作。我错过了什么。

      Multimap<String, String> multimap = LinkedListMultimap.create();
      for(......){
            String newRad = String.valueOf(radius);
            String val = String.valueOf(num);
            multimap.put(newRad, val);
      }
       ........
          double s=0.00;
         //java.util.Map multimap2;
         Multimap<Double, Double> multimap2 = LinkedListMultimap.create();
         Iterator it = multimap.entries().iterator();

            while (it.hasNext()) {
                Map.Entry pairs = (Map.Entry)it.next();
                double currentKey = Double.parseDouble((String) pairs.getKey());
                String newRad = String.valueOf(1.83);
                if(multimap.containsKey(newRad)){
                    double values = Double.parseDouble((String) pairs.getValue());
                    s += values;
                    System.out.println(s);
                }
                else{
                    s = 0.00;
                }

                System.out.println(pairs.getKey() + " = " + pairs.getValue());
                //it.remove(); // avoids a ConcurrentModificationException
            }

所以基本上它应该是这样的: 多图包含:

1.36 = 59.0
1.36 = 65.0
1.35 = 56.0
1.35 = 71.0
1.34 = 64.0
1.34 = 75.0
1.33 = 59.0

之后它应该是这样的(它应该在multimap中找到任何重复的键并添加值):

1.36 = 124.0
1.35 = 127.0
1.34 = 139.0
1.33 = 59.0

更新: 所以我能够添加值,但我认为它在地图中添加了所有值,而不仅仅是具有重复值的值。我在1.83上尝试了它,它给了我7337061.0这样的值,并且它不断增加。我的if语句出了什么问题?

1 个答案:

答案 0 :(得分:3)

永远不要将Double用作地图的关键字,原因与您永远不应使用{{1}比较浮点值(floatdouble)相同 - 不同的二进制值可能彼此非常接近,并且在打印或转换为==时具有相同的表示形式,但它们将具有不同的String并且使用hashCode()将不匹配。

我建议转换为整数或字符串形式 - f.e。如果您需要2位十进制数字,请使用equals()作为密钥,或使用特定的(int)(value*100)将其转换为字符串。