2017-02-10 77 views
0

我有兩個具有相同鍵的地圖,這些鍵的值可能完全匹配或部分匹配。基於這些確切和部分匹配我需要更新我的確切和部分匹配計數器。比較完成和部分匹配的兩個地圖的值

地圖包含類似的值:

{ORGANIZATION=[Orioles, Athletics]} 
{ORGANIZATION=[Orioles, Kansas City Athletics]} 

這裏我表示完全匹配計數器應以1爲金鶯遞增,一個部分匹配應該由1堪薩斯城競技遞增。 現在我使用map1.get(key).equals(map2.get(key))map1.get(key).contains(map2.get(key))的方式給我的計數器值不正確。

編輯

這裏是我的代碼:

List<Integer> compareResults = new ArrayList<Integer>(); 

       for (String key: annotationMap.keySet()){ 
        if (key.equals("ORGANIZATION")){ 
         if (annotationMap.get(key).equals(myMap.get(key))){ 
          orgTruePositiveCount++; 
          continue; 
         } 
         if (annotationMap.get(key).contains(myMap.get(key))){ 
          orgTruePositiveCount++; 
          continue; 
         } 
         if (!annotationMap.get(key).contains(myMap.get(key))){ 
          orgFalseNegativeCount++; 
          continue; 
         } 

        } 

         if (key.equals("PERSON")){ 
          if (annotationMap.get(key).equals(myMap.get(key))){ 
           perTruePositiveCount++; 
           continue; 
          } 
          if (annotationMap.get(key).contains(myMap.get(key))){ 
           perTruePositiveCount++; 
           continue; 
          } 
          if (!annotationMap.get(key).contains(myMap.get(key))){ 
           perFalseNegativeCount++; 
           continue; 
          } 

         } 

          if (key.equals("LOCATION")){ 
           if (annotationMap.get(key).equals(myMap.get(key))){ 
            locTruePositiveCount++; 
            continue; 
           } 
           if (annotationMap.get(key).contains(myMap.get(key))){ 
            locTruePositiveCount++; 
            continue; 
           } 
           if (!annotationMap.get(key).contains(myMap.get(key))){ 
            locFalseNegativeCount++; 
            continue; 
           } 

          } 
         } 

       for (String key: myMap.keySet()){ 
        if (!annotationMap.containsValue(myMap.get(key))){ 
         if (key.equals("ORGANIZATION")){ 
          orgFalsePositiveCount++; 
         } 

        if (key.equals("PERSON")){ 
          perFalsePositiveCount++; 
         } 

        if (key.equals("LOCATION")){ 
          locFalsePositiveCount++; 
        } 
       } 
       } 
+1

添加ŧ他與計數器的增量一起編碼。 –

+0

請用你嘗試過的東西編輯。順便說一句,當你使用'.equals'和鍵是相同的,你的櫃檯增量?當你使用'.contains'?我知道你說過,有不正確的值,但是有什麼價值? – Mike

+0

@serendipity,可能是您在部分匹配的情況下錯過了任一情況,請嘗試答案。 如果它回答您的查詢請標記爲回答 –

回答

3

可能的話,你錯過了任何一個條件在部分匹配的情況下,嘗試用下面。

public static void main(String[] args) throws Exception { 
     int exactCounter = 0; 
     int partialCounter = 0; 
     Map<String, String> dataA = new HashMap<>(); 
     dataA.put("1", "123"); 
     dataA.put("2", "456"); 
     dataA.put("3", "7890"); 

     Map<String, String> dataB = new HashMap<>(); 
     dataB.put("1", "123"); 
     dataB.put("2", "456"); 
     dataB.put("3", "789"); 

     for (Map.Entry<String, String> entryA : dataA.entrySet()) 
     { 
      if(entryA.getValue().equals(dataB.get(entryA.getKey()))){ 
       System.out.println("Exact Matched Key---"+entryA.getValue()); 
       exactCounter = exactCounter + 1; 
      } 
      else if(entryA.getValue().contains(dataB.get(entryA.getKey())) || dataB.get(entryA.getKey()).contains(entryA.getValue())){ 
       System.out.println("Partial Matched key---"+entryA.getKey()); 
       partialCounter = partialCounter + 1; 
      } 
     } 
     System.out.println("Total Exact Match---"+exactCounter); 
     System.out.println("Total Partial Match---"+partialCounter); 

    } 

結果 -

部分匹配鍵--- 3
精確匹配的鑰匙--- 2
精確匹配的關鍵--- 1個
總精確匹配--- 2 共有部分比賽--- 1

0

對於準確匹配:

Set<String> mapValues = map1.values(); 

int initialCount = mapValues.size(); 

return initialCount - mapValues.removeAll(map2.values).size(); 
相關問題