Я добавлю свои собственные открытия, которые я обнаружил с тех пор, как спросил:
К сожалению, кажется, что sprintf не обрабатывает форматирование тысяч разделителей, как формат строки .NET.
Что вам нужно сделать, это реализовать кастом Comparator
. А затем используйте:
Collections.sort(yourList, new CustomComparator<YourClass>());
В частности, вы можете написать: (Это создаст класс Anonymous, который реализует Comparator
.)
Collections.sort(yourList, new Comparator<YourClass>(){
public int compare(YourClass one, YourClass two) {
// compare using whichever properties of ListType you need
}
});
Вы можете встроить их в свой класс, если Вам нравится:
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
};
}
}
Это можно использовать так:
Collections.sort(yourList, YourClass.getAttribute2Comparator());
Если двум методам требуется одинаковая площадь, вы можете ненадлежащим образом перегружать один класс несколькими способами, что можно решить, исправив иерархию классов - например, вместо использования «shape», создайте подкласс с помощью «oval», «прямоугольник» и т. д.
Если создание подклассов не имеет смысла, вам нужно создать разные классы сравнения. В Java вы часто используете Comparator для сравнения. Создайте несколько (или создайте настраиваемый компаратор): IsbnComparator, AuthorComparator и т. Д.
Да, и настраиваемая опция будет:
BookComparator implements Compartor { enum FIELD { AUTHOR, ISBN, ... }; setSortOrder(int rank, FIELD field){...} }