【问题标题】:Sorting Java List by two parameters? [duplicate]按两个参数对Java列表进行排序? [复制]
【发布时间】:2023-03-17 00:49:01
【问题描述】:

假设我有一个名为 Product 的类,字段为 priceweight

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

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

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

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

此代码只会按价格进行比较,所以,简而言之,问题是如何选择我想使用的比较方法? (按价格或按重量)

【问题讨论】:

  • 按价格或重量排序是什么意思?你想按价格排序,同等价格按重量排序吗?
  • 我只想:A) 获取按价格排序的所有产品的列表 B) 获取按重量排序的所有产品。现在清楚了吗?顺便说一句,感谢您的关注
  • ow can I choose the compare method I want to use? 使用自定义Comparator
  • 为什么不能使用Comparator.comparingInt(Product::getPrice)Comparator.comparingInt(Product::getWeight)?您需要两个不同的比较器才能比较两个不同的字段。
  • @copeg 你能说得更清楚些吗?

标签: java list sorting collections compare


【解决方案1】:

您可以使实现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());
     }
}

然后按您想要的任何 Comparator 进行排序:

Collections.sort(productList, new PriceComparator());
...
Collections.sort(productList, new WeightComparator());

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 2015-05-31
    • 2021-04-21
    • 2020-10-04
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    相关资源
    最近更新 更多