使用自定义比较器(如Excel坐标顺序)对TreeMap进行sorting

我正在使用TreeMap及其子图来pipe理Excel文件。 我使用关键的Excel坐标。

在Excel中,顺序类似于ABC ,…, AAABAC ,…, BA …但是我的顺序是AAAAAAAB ,…, 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);