I\'ve got one 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 ca
If the two methods require the exact same footprint, you may be inappropriately overloading a single class with multiple uses, which would be resolved by fixing your class hierarchy - like instead of using "shape", subclass it with "oval", "rectangle", etc.
If subclassing doesn't make sense, you need to create different comparison classes. In Java, you often use a Comparator for comparisons. Create several (or create a configurable comparator): IsbnComparator, AuthorComparator, etc.
Oh, and the configurable option would be:
BookComparator implements Compartor { enum FIELD { AUTHOR, ISBN, ... }; setSortOrder(int rank, FIELD field){...} }
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());
You can only have one compareTo()
method in your class.
If you want to sort the same class more than one way, create Comparator
implementations.