2017-02-10 23 views
0

完全一致または部分一致の値を持つことができる同じキーを持つ2つのマップがあります。これらの部分一致と部分一致に基づいて、私は正確な一致カウンターと部分一致カウンターを更新する必要があります。完全一致のための私のカウンターはオリオールズのために1ずつ増加すべきであり、部分一致のための1つは、カンザスシティの運動競技のために1ずつ増加すべきである。ここ完全一致と部分一致の2つのマップの値の比較

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

マップのような値が含まれています。 現在、私がmap1.get(key).equals(map2.get(key))map1.get(key).contains(map2.get(key))を使ってやっているところでは、私のカウンターの値が間違っています。

EDIT

はここに私のコードです:あなたは部分一致の場合の条件のいずれかを逃し、おそらく

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

@sndndipityおそらく、部分一致の場合にどちらかの条件を逃した場合は、答えを試してみてください。 あなたの質問に答えた場合は、答えとしてマークしてください –

答えて

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(); 
関連する問題