7

我有一个具有以下值的数组列表

ArrayList [Admin,Readonly,CSR,adminuser,user,customer]

当我使用

Collections.sort(ArrayList)

我得到以下结果

[Admin,CSR,Readonly,adminuser,customer,user]

根据Java doc,上述结果是正确的,但我的期望是(排序不分大小写(大写/小写)

[Admin,adminuser,CSR,customer,Readonly,user]

提供帮助,无论java中的大小写如何进行排序,还有其他可用的方法吗

注意:我将进行自动测试以检查 Web 表中的排序顺序

问候

普拉布

4

6 回答 6

7

这样就可以了

Collections.sort(yourList, String.CASE_INSENSITIVE_ORDER);

这是我试过的,

ArrayList<String> myList=new ArrayList<String>();
Collections.addAll(myList,"Admin","Readonly","CSR","adminuser","user","customer");
System.out.println(myList);
Collections.sort(myList, String.CASE_INSENSITIVE_ORDER);
System.out.println(myList);

我得到以下输出,

[Admin, Readonly, CSR, adminuser, user, customer]
[Admin, adminuser, CSR, customer, Readonly, user]
于 2013-10-15T13:37:37.000 回答
4

您可以使用自己的比较器进行排序,而不考虑大小写(大写/小写)

Collections.sort(list, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2)
        {    
            return  s1.compareToIgnoreCase(s2);
        }
});
于 2013-10-15T13:35:18.087 回答
2

您可以使用自定义比较器。

尝试这个:

    // list containing String objects
    List<String> list = new ArrayList<>();

    // call sort() with list and Comparator which
    // compares String objects ignoring case
    Collections.sort(list, new Comparator<String>(){
        @Override
        public int compare(String o1, String o2) {
            return o1.compareToIgnoreCase(o2);
        }
    });

您将需要在比较对象忽略大小写Comparator的方法中传递实例。Collections.sort()String

于 2013-10-15T13:33:48.583 回答
1
Collections.sort(ArrayList, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            return s1.toLowerCase().compareTo(s2.toLowerCase());
        }
    });
于 2013-10-15T13:35:00.423 回答
1
public class SortIgnoreCase implements Comparator<Object> {
    public int compare(Object o1, Object o2) {
        String s1 = (String) o1;
        String s2 = (String) o2;
        return s1.toLowerCase().compareTo(s2.toLowerCase());
    }
}

然后

Collections.sort(ArrayList, new SortIgnoreCase());
于 2013-10-15T13:33:21.287 回答
0

答案很简单——大写字母的数字较小ASCII。所以默认比较工作正常。

于 2013-10-15T13:33:43.500 回答