Да. Реализуйте интерфейс java.util.Comparator
и используйте перегруженный метод: Collections.sort(list, comparator)
(вам нужно будет создать новый List
из элементов коллекции, например new ArrayList(collection)
)
Так что вы можете иметь:
public CurrentPriceQuoteComparator implements Comparator<QuoteBean> {
@Override
public int compare(QuoteBean b1, QuoteBean b2) { // implement comparison }
}
public ChangeQuoteComparator implements Comparator<QuoteBean> {
@Override
public int compare(QuoteBean b1, QuoteBean b2) { // implement comparison }
}
А затем используйте Collections.sort(list, ChangeQuoteComparator.INSTANCE);
Обратите внимание, что хорошей практикой является объявление одиночного экземпляра каждого компаратора, а не его создание каждый раз:
public static final ChangeQuoteComparator INSTANCE =
new ChangeQuoteComparator();
Чтобы еще немного расширить, вы можете определить enum
с различными типами сравнения:
public enum ComparisonType {
CHANGE, CURRENT_PRICE; // etc..
}
и определите Map
, чтобы сопоставить каждый тип сравнения с соответствующим компаратором:
private static final Map<ComparisonType, Comparator<QuoteBean>> comparators =
new HashMapMap<ComparisonType, Comparator<QuoteBean>>();
static {
comparators.put(ComparisonType.CHANGE, ChangeQuoteComparator.INSTANCE);
comparators.put(ComparisonType.CURENT_PRICE,
CurrentPriceQuoteComparator.INSTANCE);
}
и затем позволить клиенту указать, какое сравнение ему бы хотелось
public List<QuoteBean> getOrdered(ComparisonType type, // other criteria) {
List<QuoteBean> list = new ArrayList<QuoteBean>(getQuotesCollection());
Collections.sort(list, comparators.get(type));
return list;
}