使用自定义比较器(如Excel坐标顺序)对TreeMap进行sorting
我正在使用TreeMap
及其子图来pipe理Excel文件。 我使用关键的Excel坐标。
在Excel中,顺序类似于A
, B
, C
,…, AA
, AB
, AC
,…, BA
…但是我的顺序是A
, AA
, AAA
, AB
,…, B
。
我以为解决scheme是使用自定义比较,但我不知道如何使它获得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);
首先,你想比较string的长度(使用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);