userimage

How do I make 2 comparable methods in only one class?

There is a class, that I sort it already by one attribute. Now I need to make another thing, that I need to create another way to sort my data. How can I make it, so I can choose between the two methods. The only command I know is Collections.sort that will pick up the method compareTo from the class I want to compare its data.

Is it even possible?

userimage

What you need to do is implement a custom Comparator. And then use:

Collections.sort(yourList, new CustomComparator<YourClass>());

Specifically, you could write: (This will create an Anonymous class that implements Comparator.)


Collections.sort(yourList, new Comparator<YourClass>(){

    public int compare(YourClass one, YourClass two) {

        // compare using whichever properties of ListType you need

    }

};

You could build these into your class if you like:

class YourClass {


    static Comparator<YourClass> getAttribute1Comparator() {

        return new Comparator<YourClass>() {

            // compare using attribute 1

        };

    }

    static Comparator<YourClass> getAttribute2Comparator() {

        return new Comparator<YourClass>() {

            // compare using attribute 2

        };

    }

}

It could be used like so:

Collections.sort(yourList, YourClass.getAttribute2Comparator());

Answer is