2016-09-11 4 views
0

Скажем, у меня есть класс под названием Product, с полями price и weight.Сортировка списка Java по двум параметрам?

Моя конечная цель должна иметь список продуктов, которые можно сортировать по цене или весу

Я знаю, что могу сделать Product implements Comparable<Product>. Это означает, что я должен, например:

@Override 
public int compareTo(Product compareProduct) { 
    int comparePrice = ((Product) compareProduct).getPrice(); 

    //ascending order 
    return this.price - comparePrice; 
} 

Этот код будет сравнивать только по цене, так, в двух словах, речь идет , как я могу выбрать метод сравнения я хочу использовать? (ByPrice или byWeight)

+1

Что это делает означает сортировать по цене или весу? Вы хотите сортировать по цене, а по равным ценам сортировать по весу? – Tunaki

+0

Я просто хочу: A) Получить список со всеми товарами, отсортированными по цене B) Получить все товары отсортированные по весу. Так понятно? Спасибо за внимание btw –

+0

'ow я могу выбрать метод сравнения, который я хочу использовать?' Использовать пользовательский [Comparator] (https://docs.oracle.com/javase/7/docs/api/java/util/Comparator .html) – copeg

ответ

3

Вы могли бы сделать классы, которые реализуют Comparator использовать в качестве параметров при запуске Collections.sort():

static class PriceComparator implements Comparator<Product> { 
    public int compare(Product p1, Product p2) 
    { 
     return p1.getPrice().compareTo(p2.getPrice()); 
    } 
} 

static class WeightComparator implements Comparator<Product> { 
    public int compare(Product p1, Product p2) 
    { 
     return p1.getWeight().compareTo(p2.getWeight()); 
    } 
} 

, а затем сортировать по какой компаратор вы хотите:

Collections.sort(productList, new PriceComparator()); 
... 
Collections.sort(productList, new WeightComparator()); 
Смежные вопросы