比较完整匹配和部分匹配的两个映射的值

时间:2017-02-10 07:42:16

标签: java collections

我有两个具有相同键的地图,这些地图可能具有完全匹配或部分匹配的值。基于这些精确匹配和部分匹配,我需要更新我的精确匹配和部分匹配计数器。

地图包含以下值:

{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++;
                   }   
                 }
               }

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

完全匹配:

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

int initialCount = mapValues.size();

return initialCount -  mapValues.removeAll(map2.values).size();