我有String列表。清单如下
if (MessageBox.Show("Error message:\n" + ex.Message, "Unable to connect to database!",
MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)
{
Application.Exit();
}
如何使用比较器对此字符串列表进行排序,并按以下方式对其进行排序
ABC, DAY 1/2, DAY 1/1, DAY 1/16, DAY 1/2, day 1/1, day 1/52, day 1/32.
因此,大写单词应该首先出现,并且还应该按照1 / 1,1 / 2,1 / 16等降序排列连接数字进行排序。
我试过以下代码。我首先使用集合的默认排序方法对其进行了排序。它使用大写字母排序,然后是小写,然后我尝试自定义代码但不能按降序排序。
ABC, DAY 1/1, DAY 1/2, DAY 1/16, day 1/1, day 1/32, day 1/52
答案 0 :(得分:2)
试试这个:
public static void main(String[] args) {
String data="ABC, DAY 1/2, DAY 1/1, DAY 1/16, DAY 1/2, day 1/1, day 1/52, day 1/32";
String [] list=data.split(",");
List<String> llist=new ArrayList<>();
for (String string : list) {
llist.add(string);
}
Collections.sort(llist,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1.contains("DAY 1/") && o2.contains("DAY 1/")){
String s1=o1.split("/")[1];
String s2=o2.split("/")[1];
return Integer.parseInt(s1)>Integer.parseInt(s2)?1:-1;
}else{
return o1.trim().compareTo(o2.trim());
}
}
});
System.out.println(llist);
}
输出:
[ABC, DAY 1/1, DAY 1/2, DAY 1/2, DAY 1/16, XYZ, day 1/1, day 1/32, day 1/52, xyz]