我不知道为什么,但我自己的所有问题都Comparator
没有在这里写,这是我的错误。
所以,我真的用过
Map<String, Map<String, IrregularWord>> result4 = new TreeMap<>(new LessonsShortPathComparator());
Comparator
:
public class LessonsShortPathComparator implements Comparator<String> {
public static String LES_SHORT_PATH_REG_EXP = "[0-9]+_[0-9]+_[0-9]+";
public int compare(String o1, String o2) {
String[] o1Str = o1.split("_");
String[] o2Str = o2.split("_");
if (Integer.parseInt(o1Str[0]) > Integer.parseInt(o2Str[0]))
return 1;
if (Integer.parseInt(o1Str[1]) > Integer.parseInt(o2Str[1]))
return 1;
if (Integer.parseInt(o1Str[2]) > Integer.parseInt(o2Str[2]))
return 1;
return 0;
} else
return o1.compareTo(o2);
}
}
这是一个问题。我只比较更大的价值,但不包括更少。当我这样修复它时:
public class LessonsShortPathComparator implements Comparator<String> {
public static String LES_SHORT_PATH_REG_EXP = "[0-9]+_[0-9]+_[0-9]+";
public int compare(String o1, String o2) {
if (o1.matches(LES_SHORT_PATH_REG_EXP) && o2.matches(LES_SHORT_PATH_REG_EXP)) {
String[] o1Str = o1.split("_");
String[] o2Str = o2.split("_");
for (int i = 0; i < o1Str.length; i++) {
int i1 = Integer.parseInt(o1Str[i]);
int i2 = Integer.parseInt(o2Str[i]);
if (i1 - i2 != 0) {
return i1 - i2;
}
}
return 0;
} else
return o1.compareTo(o2);
}
}
现在一切正常。我不明白为什么?也许IrregularWord
在我的Comparator
. 首先TreeMap
比较键并为值找到正确的位置,反之亦然。
抱歉描述不完整。我真的不知道aComparator
会影响到什么。