7

i have an Array List with Following values

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

when i used

Collections.sort(ArrayList)

i'm getting the Following Result

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

as per the Java doc the above results are correct, but my Expectation is (sorting irrespective of case (upper / lower case)

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

provide an help how will do the sorting irrespective of case in java, is there any other method available

Note: i will do an Automate test for checking the sorting order in the Web table

regards

prabu

3
  • take a look at java Comparator Commented Oct 15, 2013 at 13:32
  • Have you tried this : stackoverflow.com/questions/7469643/… Commented Oct 15, 2013 at 13:33
  • Just add a comparator to Collections.sort() which will ignore the case. You could write your own, but there is one already defined in String class: String.CASE_INSENSITIVE_ORDER. So you sort call will be "Collections.sort(your_List<String>, String.CASE_INSENSITIVE_ORDER)". The full solution is described by Ulaga below. Commented May 25, 2014 at 18:39

6 Answers 6

7

This'll do,

Collections.sort(yourList, String.CASE_INSENSITIVE_ORDER);

this is i have tried,

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);

the following output i got,

[Admin, Readonly, CSR, adminuser, user, customer]
[Admin, adminuser, CSR, customer, Readonly, user]
Sign up to request clarification or add additional context in comments.

1 Comment

Collections.sort(before_fn, String.CASE_INSENSITIVE_ORDER); for (String temp : before_fn) { System.out.println("Ascending Order" + temp); } its working correctly, let me know the Reversse Order for that same <br/> when i tried Collections.sort(before_fn, Collections.reverseOrder()); its working i required irrespective of case
4

You can use your own comparator like this to sort irrespective of case (upper / lower case)

Collections.sort(list, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2)
        {    
            return  s1.compareToIgnoreCase(s2);
        }
});

Comments

2

You can do with custom Comparator.

Try this:

    // 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);
        }
    });

You will need to pass Comparator instance in Collections.sort() method which compares String objects ignoring case.

Comments

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());
    }
}

then

Collections.sort(ArrayList, new SortIgnoreCase());

1 Comment

Not sure why you would do Comparator<Object> instead of Comparator<String> when you explicitly typecase them immediately after entering the method.
1
Collections.sort(ArrayList, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            return s1.toLowerCase().compareTo(s2.toLowerCase());
        }
    });

Comments

0

Answer is simple - big letters have lower number in ASCII. So default comparing works fine.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.