通过两个参数对Java List进行排序?

时间:2016-09-11 15:11:45

标签: java list sorting collections compare

我们说我有一个名为Product的课程,字段为priceweight

我的最终目标是列出我可以按价格或重量排序的产品清单

我知道我可以Product implements Comparable<Product>。这意味着我将不得不,例如:

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

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

此代码仅按价格进行比较,因此,简而言之,问题是如何选择我想要使用的比较方法? (byPrice或byWeight)

1 个答案:

答案 0 :(得分:3)

在运行get()时,您可以将实现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());
     }
}