2016-11-12 51 views
2

我有兩個類:類別排序定製的比較器

public class Invoice { 

private int InvoiceId; 
private Customer customer; 
private Date invoiceDate; 

}

而且

public class Customer { 
    private int customerId; 
    private String customerType; 
} 

customerType場可以有三個值:F,H,B

我有一個發票對象的數組列表,我想按照特定的順序使用customerType屬性對它進行排序:所有的發票與銅stomerType「F」,然後是那些「H」然後「B」。

我試圖實現比較器接口,但問題是他的方法比較採用Customer對象的兩個參數,並且按升序或降序進行排序。 這是代碼:

Collections sort(invoicesList, new Comparator<Invoice >() { 
       public int compare(Invoice s1,Invoice s2) { 
         return s1.getCustomer().getCustomerTpe().equalsIgnoreCase("F").compareTo(s2.getCustomer().getCustomerTpe().equalsIgnoreCase("H")) 

         } 
        } 
    ); 

有沒有辦法我收藏有三個的Fileds值特定的順序排序? Thorks

回答

2

自定義排序順序的一種方法是首先映射參數,然後對映射值進行排序。在您的案例中,可以通過在字符串「FHB」中找到其索引來完成customerType的映射。在Java 8中,這可能表示爲

Collections.sort(invoicesList, Comparator.comparingInt(
    (invoice) -> "FHB".indexOf(invoice.getCustomer().getCustomerType()))); 
+1

我使用的是Java 6,我將嘗試使用我的Java版本實現此功能。謝謝 – Alex2330