我收到了一个通用过程的哈希图,我需要使用自定义比较器对 Key 进行排序。
以下是我尝试过的,但它似乎不起作用 - 它没有对键进行排序。
地图的键的形式为长字符串短示例:(11169-SW-1 / 11169-SW-2 / 11132-SH-2 / 11132-SH-7 / 11132-SH-1)。字符串比较不起作用,因为我需要它用于数字部分,所以我定义了一个自定义比较器。我意识到需要清理自定义比较器代码 - 例如需要合并多个返回语句并且需要进行清理,但是一旦我让它工作,我就可以这样做。
我该怎么做?
Map<String, Map<String, String>> strValuesMap = Utilities.getDataMapFromDB();
Map<String, Map<String, String>> sortedMap = new TreeMap<>(new CustomComparator());
sortedMap.putAll(strValuesMap);
sortedMap.forEach((x, y) -> System.out.println("id " + x + "=" + y));
自定义比较器定义如下
class CustomComparator implements Comparator<String> {
@Override
public int compare(String plId1, String plId2) {
System.out.println("plId1 : " + plId1 + " plId2 " + plId2);
String[] plId1Split = plId1.split("-");
String[] plId2Split = plId2.split("-");
int retValue = 0;
if (!plId1Split[0].equalsIgnoreCase(plId2Split[0])) {
Long seq1 = new Long(plId1Split[0]);
Long seq2 = new Long(plId2Split[0]);
retValue = seq1.compareTo(seq1);
}
if (retValue != 0) {
return retValue;
}
if (!plId1Split[1].equalsIgnoreCase(plId2Split[1])) {
retValue = plId1.compareTo(plId2);
}
if (retValue != 0) {
return retValue;
} else {
Short seq1 = new Short(plId1Split[2]);
Short seq2 = new Short(plId2Split[2]);
retValue = seq1.compareTo(seq2);
return retValue;
}
}
}
谢谢