2013-03-22 53 views
0

我正在为我的项目使用JDK 1.7。我碰到了哈德尔。我有一个对象的ArrayList有两个属性:价格(十进制)和产品名称(字符串)。我需要先按价格再按产品名称对ArrayList进行排序。我试过使用Java比较器,但我只能通过一个属性进行排序。 下面是我的代码:对具有两个属性的对象排序ArrayList

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 ; 
} 

}

这个代码只排序的价格,而不是名字。

请我apprecaite你的帮助和例子。

感谢 伊什

+4

告诉我们,你已经写了comperator ... – 2013-03-22 12:12:31

+1

的“比较器”实际上应该足够了。确保你先按价格再按产品名称进行比较。 – 2013-03-22 12:13:45

+1

编写一个比较器,比较第一个值,如果这些值相等,则比较第二个值。 – Simulant 2013-03-22 12:13:48

回答

2

如果你不介意使用Apache共享库,共享郎有一个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(); 
    } 
    ... 
} 

然后,只需调用列表上的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. Bob的产品
  2. 查理的产品
  3. 亚当的产品
相关问题