我使用TreeMap
及其subMap
来管理Excel文件。
我使用Excel坐标作为键。
在Excel中,订单类似于A
,B
,C
,...,AA
,AB
,AC
,. ..,BA
...但我的订单是A
,AA
,AAA
,AB
,...,B
我认为解决方案是使用自定义比较器,但我不知道如何使其获得Excel字母顺序。
Comparator<String> excelOrder= new Comparator<String>() {
@Override public int compare(String s1, String s2) {
//make order
}
};
然后使用
SortedMap<String,String> map = new TreeMap<String,String>(secondCharComparator);
答案 0 :(得分:2)
首先,您希望比较字符串的长度(使用String.length()
),然后按字典顺序(这正是默认使用String.compareTo(other)
完成的操作)。以下是这样的:
Comparator<String> excelOrder = new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
int s1Length = s1.length();
int s2Length = s2.length();
if (s1Length < s2Length) {
return -1;
} else if (s1Length > s2Length) {
return 1;
} else {
return s1.compareTo(s2);
}
}
};
请注意,如果您使用的是Java 8,则可以更简单地编写(此代码使用以下静态导入import static java.util.Comparator.comparingInt;
):
Comparator<String> excelOrder = comparingInt(String::length).thenComparing(String::compareTo);