Java的集合排序。大写首先应该是小写,然后是小写

时间:2015-10-07 13:14:48

标签: java collections

我有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

1 个答案:

答案 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]