java - 通过两个参数对 Java 列表进行排序?

标签 java list sorting collections compare

假设我有一个名为 Product 的类(class),字段 priceweight .

我的最终目标是拥有一个可以按价格或重量排序的产品列表

我知道我可以做Product implements Comparable<Product> 。这意味着我必须,例如:

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

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

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

最佳答案

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

关于java - 通过两个参数对 Java 列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39437523/

相关文章:

java - JList 奇数列表

java - 使用jetty启用WebApplicationInitializer实现

c# - 从 List<Dictionary<string, string>> 获取唯一值

python - 如何比较具有两个条件的两个列表?

java - 从列表中提取文件名

php - 按具有自定义排序优先级的列对数组数组进行排序(不是按字母顺序排列)

Java : Multiple keyboard input during "Timer" period

php - 如何根据每个对象的属性对对象数组进行排序

sorting - SSRS - 根据列值对表进行排序

java - 如何将 3D 纹理加载到 LWJGL 中的 3D 模型上