2017-03-16 41 views
2

我有兩個TreeMap的比較兩個TreeMap中

的第一張地圖是:

Map<String, Double> m1 = new TreeMap(); 

,第二個是:

Map<String,double []> m2 = new TreeMap(); 

我要在第一張地圖的鍵搜索到第二一個,然後將第一個映射的值乘以第二個映射值的列表(對於相似的鍵)。 之後,我將從乘法中得到一個double類型的數組,然後我想將每個索引的值相加獨立。

例如:

地圖1:

Apple : 1.0 
Cat:2.1 
Dog:1.2 

地圖2:

Apple:{2.0,0.0,4.0} 
Dog {1.1,0.0,0.0} 
Moon:{0.0,5.0,2.0} 

結果將是:

Apple{2.0,0.0,4.0} 
Dog{1.32,0.0,0.0} 

然後求和:

{3.32,0.0,4.0} 

這是我的嘗試,我做了兩個矩陣之間的搜索,然後我做乘法。

***我的問題我該如何做每個指數的總和以及如何檢索特殊指數的值。

for (Map.Entry<String,Double> entry : m1.entrySet()) { 
List<Double> myList = new ArrayList<Double>(); 
    if (m2.containsKey(entry.getKey())) { 
     //if the key is common in map1 and map2, compare the values 
        double y=entry.getValue(); 
        double j[]=m2.get(entry.getKey()); 
        for (int u=0;u<j.length;u++){ 
         myList.add(j[u]); 
        } 
        for (int i=0;i<myList.size();i++){ 

        System.out.println(entry.getKey()+" "+myList.get(i)*y); 
       } 
       }} 
+0

這裏的一個nit選擇是containsKey和combo的get後面只是浪費時間。只需使用get,並查看它是否爲null。 – MeBigFatGuy

+0

@MeBigFatGuy Thx爲您的重播,但我沒有明白;(,你能解釋更多 – Geek

+0

double j [] = m2.get(entry.getKey()); if(j!= null){ 。 .... } – MeBigFatGuy

回答

0

鑑於加入的可交換性,保持總求和陣列環路的外部,並且用於每個匹配的鑰匙,總和陣列的當前索引i增加的y和f] [I]的產物。

我們假設數組的大小爲N.那麼:

double[] finalSum = new double[N]; 

for (Map.Entry<String,Double> entry : m1.entrySet()) { 
    if (m2.containsKey(entry.getKey())) { 
     //if the key is common in map1 and map2, compare the values 
     double y=entry.getValue(); 
     double j[]=m2.get(entry.getKey()); 
     for (int u=0;u<j.length;u++){ 
      finalSum[u] += y * j[u]; 
     } 
    } 
} 
+0

感謝Edd爲您的重播,最後總結知道包含所有鍵的valuse,但我的問題我怎麼能總結每個索引speratly的值,例如索引值0。 – Geek