我有两个具有相同键的地图,这些地图可能具有完全匹配或部分匹配的值。基于这些精确匹配和部分匹配,我需要更新我的精确匹配和部分匹配计数器。
地图包含以下值:
{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++;
}
}
}
答案 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();