Java - sorting using Collections.sort()

collections, double, integer, java, sorting

Solution

You need to use a generic upper bound of `Number` intersecting with `Comparable<T>`:

public <T extends Number & Comparable<T>> ArrayList<T> sortDescending(ArrayList<T> al){
    Comparator<T> c=Collections.reverseOrder();
    Collections.sort(al,c);
    return al;
}

public <T extends Number & Comparable<T>> ArrayList<T> sortAscending(ArrayList<T> al){
    Collections.sort(al);
    return al;
}

All JDK `Numbers` (eg `Float`, `Integer` etc) match this typing.

For the uninitiated, the syntax `<T extends A & B>` is the way you bound `T` to both `A` and `B`.

FYI, there is no syntax for "or" logic (nor would it make sense if you think about it)

Problem

I have to write a method to sort both Integers and Doubles. ``` public ArrayList<Number> sortDescending(ArrayList<Number> al){ Comparator<Number> c=Collections.reverseOrder(); Collections.sort(al,c); return al; } public ArrayList<Number> sortAscending(ArrayList<Number> al){ Collections.sort(al); return al; } ``` The problem is that in sortAscending, the following error occurs: Bound mismatch: The generic method sort(List) of type Collections is not applicable for the arguments (ArrayList). The inferred type Number is not a valid substitute for the bounded parameter < T extends Comparable < ? super T>>

Original source