比较两个不按确切顺序排列的LinkedHashMap



我有两张地图看起来像这样:

{PERSON=[Jack Fisher], ORGANIZATION=[Oriole, American League]}
{LOCATION=[Oriole], PERSON=[Jack Fisher]}

我需要比较它们并为完全匹配、部分匹配和不匹配增加一些计数器。我正在迭代这两张地图及其值,但由于它们不按顺序排列,我的计数都搞砸了。是否可以比较这些地图?如果没有,那么是否有一种解决方法,我可以将它们按顺序排列,然后进行比较。我如何将它们按确切顺序排列?

编辑 - 添加代码

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

你可以使用这样的SortedMap<K,V>TreeMap<K,V>

SortedMap<String, List<String>> left  = new TreeMap<>();
SortedMap<String, List<String>> right = new TreeMap<>();
left .addAll( annotationMap );
right.addAll( rageMap );
compare( left, right );

要比较列表,您可以使用此答案。

最新更新