2014-06-10 5 views
0

Adding values of two maps whenever there is a key match을보고 난 후에도 이것을 알아낼 수 없습니다. 키로 반경을 포함하고 값으로 진폭을 포함하는 다중 맵을 만들었습니다. 그러나 열쇠의 중복이 있습니다. 그래서 전체 맵을 가로 지르고 싶습니다. 중복 된 키가 있다면 해당 키의 값을 추가하고 싶습니다. 나는 그것을 새로운지도 또는 double sum에 추가하려고 시도했지만 작동시키지 못하고있다. 나는 무엇이 없는가.멀티 맵에 값을 추가하는 방법

 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 
      } 

그래서 기본적으로는 다음과 같이해야합니다 : 과 multimap이 포함되어 이후

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 

UPDATE : 그래서 값을 더할 수는 있지만지도에있는 모든 값을 복제본과 함께 추가하는 것만으로는 충분하지 않다고 생각합니다. 나는 1.83에서 그것을 시도하고 7337061.0 같은 가치를 제공하고 그것은 계속 증가합니다. if 문에서 잘못된 점은 무엇입니까? 다른 이진 값은 서로 매우 가까이 할 수 있으며,이 -

+0

어떤 멀티 맵 구현 도구를 사용하고 있습니까? –

+0

@ user2321368 주문을 유지하기 위해 연결된 해시지도가있는 구아바 멀티 맵을 사용하고 있습니다. – selena

+0

Multimap에 중복 키가 있다고 생각하지 않습니다. 하나의 키에 대해 여러 값 (중복 가능)이 있지만 중복 키는 아닙니다. – Eypros

답변

3

이제까지 당신이 이제까지 ==를 사용하여 부동 소수점 값 (floatdouble)를 비교해서는 안 같은 이유로,지도의 핵심으로 Double의를 사용하지 마십시오 인쇄되거나 String으로 변환 될 때 동일한 표현이지만, hashCode()과 다를 것이므로 equals()을 사용하여 일치하지 않습니다.

정수 또는 문자열 형식으로 변환하는 것이 좋습니다 - f.e. 2 자리 10 진수의 정확도가 필요한 경우 (int)(value*100)을 키로 사용하거나 특정 NumberFormat을 사용하여 문자열로 변환하십시오.

+0

나는 그것을 지금했다. 그러나 나는 나의 문제를 고치는 것처럼 보이지 않는다. 중복 키를 가져 와서 값을 함께 추가 할 수 없습니다. 위의 코드는 여전히 많은 오류를 만듭니다. – selena

+0

'double currentKey = (double) it.next();'를 으로 변경합니다. double currentKey = pairs.getKey();'. 또한, 모든 값의 추가는 어디입니까? [MultiMap documentation] (https://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/MultiMap.html)을 읽었습니까? 또한 두 번째'Map'에'MultiMap'이 필요한 이유는 무엇입니까? –

+0

double currentKey = pairs.getKey(); pairs.getKey()가 객체를 반환하고 그것을 double로 변환 할 수 없기 때문에이 줄은 오류를 만듭니다. 더블 합계에 값을 추가하려고했지만 값을 두 배로 변환하지 않으므로 아마도 맵을 사용하여 시도해 보았을 것입니다. – selena

관련 문제