javacollections

Sorting values of a Set of String representations of integers


I am trying to sort elements of a set but am unable to so far. Here is my attempt:

public static void main(String [] args){
    Set<String> set=new HashSet<String>();
    set.add("12");
    set.add("15");
    set.add("5");
    List<String> list=asSortedList(set);
}

public static
<T extends Comparable<? super T>> List<T> asSortedList(Collection<T> c) {
  List<T> list = new ArrayList<T>(c);
  Collections.sort(list);
  return list;
}

This and other ways I've attempted are not working since it is giving me elements in the same order in which they were added: 12, 15, 5.


Solution

  • If you sort the strings "12", "15" and "5" then "5" comes last because "5" > "1". i.e. the natural ordering of Strings doesn't work the way you expect.

    If you want to store strings in your list but sort them numerically then you will need to use a comparator that handles this. e.g.

    Collections.sort(list, new Comparator<String>() {
        public int compare(String o1, String o2) {
            Integer i1 = Integer.parseInt(o1);
            Integer i2 = Integer.parseInt(o2);
            return (i1 > i2 ? -1 : (i1 == i2 ? 0 : 1));
        }
    });
    

    Also, I think you are getting slightly mixed up between Collection types. A HashSet and a HashMap are different things.