【问题标题】:Sorting ArrayList of objects with two properties使用两个属性对对象的 ArrayList 进行排序
【发布时间】:2013-03-22 12:06:07
【问题描述】:

我在我的项目中使用 JDK 1.7。我遇到了Huddle。我有一个对象的 ArrayList,它有两个属性:价格(十进制)和产品名称(字符串)。我需要先按价格然后按产品名称对 ArrayList 进行排序。我尝试使用 Java 比较器,但我只能按一个属性排序。 这是我的代码:

private static class PriceComparator implements Comparator<Product>{
 @Override
 public int compare(Product p1, Product p2) {
    return (p1.getPrice() > p2.getPrice() ) ? -1: (p1.getPrice() < p2.getPrice()) ?   
  1:0 ;
 }

}

此代码仅排序价格,而不是名称。

感谢您的帮助和示例。

谢谢 伊什

【问题讨论】:

  • 向我们展示您编写的 Comperator...
  • Comparator 实际上应该足够了。确保先按价格进行比较,然后按产品名称进行比较。
  • 编写一个比较器,比较第一个值,如果这些值相等,则比较第二个值。

标签: java arrays sorting


【解决方案1】:

如果您不介意使用 Apache Commons 库,Commons Lang 有一个 CompareToBuilder。您可以使用它轻松比较多个字段。基元是自动处理的,但您也可以为每个字段传递一个可选的自定义比较器。

public class Product implements Comparable<Product> {
    private float price;
    private String name;
    ...
    @Override
    public int compareTo(Product other) {
        return new CompareToBuilder()
            .append(getPrice(), other.getPrice())
            .append(getName(), other.getName())
            .toComparison();
    }
    ...
}

然后只需在 List 上调用 Collections.sort()。

List<Product> products = new ArrayList<Product>();
products.add(new Product("Adam's Product", 10.0))
products.add(new Product("Charlie's Product", 8.0))
products.add(new Product("Bob's Product", 8.0))
Collections.sort(products)

它们现在将按以下顺序排列:

  1. 鲍勃的产品
  2. 查理的产品
  3. 亚当的产品

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多