2013-03-22 115 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. 亞當的產品