I have two maps that look like this:
{PERSON=[Jack Fisher], ORGANIZATION=[Oriole, American League]}
{LOCATION=[Oriole], PERSON=[Jack Fisher]}
I need to compare them and increment some counters for an Exact Match,Partial Match and No Match. I am iterating over these two maps and their values but since they are not in order my counts are all messed up. Is it possible to compare these maps? If not then is there a workaround where I put them in order and then compare. And how do I put them in exact order?
EDIT - ADDING CODE
private static List<Integer> compareMaps(LinkedHashMap<String, List<String>> annotationMap,
LinkedHashMap<String, List<String>> rageMap) {
List<Integer> compareResults = new ArrayList<Integer>();
int i_index = 0;
for (Entry<String, List<String>> entry : annotationMap.entrySet()) {
if (rageMap.entrySet().isEmpty()) {
orgFalseNegativeCount++;
continue;
}
for (Entry<String, List<String>> rageEntry : rageMap.entrySet()) {
if (entry.getKey().equals("ORGANIZATION")) {
for (String val : entry.getValue()) {
recusion: for (int i = i_index; i < rageEntry.getValue().size();) {
String rageVal = rageEntry.getValue().get(i);
if (val.equals(rageVal)) {
orgTruePositiveCount++;
i_index++;
break recusion;
}
else if ((val.length() > rageVal.length()) && val.contains(rageVal)) { // ||
// dataB.get(entryA.getKey()).contains(entryA.getValue())){
orgTruePositiveCount++;
i_index++;
break recusion;
} else if ((val.length() < rageVal.length()) && rageVal.contains(val)) {
orgTruePositiveCount++;
i_index++;
break recusion;
}
else if (!val.contains(rageVal)) {
orgFalseNegativeCount++;
i_index++;
break recusion;
} else if (!rageVal.contains(val)) {
orgFalsePositiveCount++;
i_index++;
break recusion;
}
}
}
}
if (entry.getKey().equals("PERSON")) {
for (String val : entry.getValue()) {
recusion: for (int i = i_index; i < rageEntry.getValue().size();) {
String rageVal = rageEntry.getValue().get(i);
if (val.equals(rageVal)) {
perTruePositiveCount++;
i_index++;
break recusion;
}
else if ((val.length() > rageVal.length()) && val.contains(rageVal)) {
perTruePositiveCount++;
i_index++;
break recusion;
}
else if ((val.length() < rageVal.length()) && rageVal.contains(val)) {
perTruePositiveCount++;
i_index++;
break recusion;
}
else if (!val.contains(rageVal)) {
perFalseNegativeCount++;
i_index++;
break recusion;
}
else if (!rageVal.contains(val)) {
perFalsePositiveCount++;
i_index++;
break recusion;
}
}
}
}
}
}
}