Yes, 2 things — firstly, the above sort is case sensitive, that is the uppercase takes priority over lowercase pushing ‘Java’ after ‘JSP’. Secondly, if the collection had any null values, it will throw a NullpointerException.
These two issues can be rectified by providing a custom sorting implementation that ignores case and handles null values by pushing them to the end. The Collections class’s sort method takes a Comparator implementation as a second argument. In the code below, the Comparator has been implemented as an anonymous inner class. The compare(…) method will be called a number of times by the Collections.sort(list, comparator).
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Sort2 {
public static void main(String[] args) {
List<String> values = Arrays.asList(“JEE”, “Java”, null, “Servlets”, null, “JMS”, “JNDI”, “JDBC”, “JSP”, null,”EJB”);
//The comparator is defined as an anonymous inner class, but it can be
//defined in its own class. Handles nulls and ignores case
Collections.sort(values, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//push the null values to the end
if(o1 == null){
if(o2 == null) {
return 0;
}
return 1;
}
else if(o2 == null){
return -1;
}
return o1.compareToIgnoreCase(o2);
}
}); // anonymous inner class end
System.out.println(values);
}
}