2016-11-12 2 views
2

Ich habe zwei Klassen:Collections Art benutzerdefinierte Komparator

public class Invoice { 

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

}

Und

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

Customer Feld kann drei Werte annehmen: F, H, B

Ich habe Eine ArrayListe von Rechnungsobjekten, die ich mit der Eigenschaft customerType in einer bestimmten Reihenfolge sortieren möchte: die Rechnung mit cu stomerType "F" dann diejenigen mit "H" dann "B".

Ich habe versucht, die Comparator-Schnittstelle zu implementieren, aber das Problem ist, dass seine Methode vergleichen zwei Argumente von Customer-Objekten nimmt und die Sortierung in aufsteigender oder absteigender Weise erfolgt. Dies ist der Code:

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")) 

         } 
        } 
    ); 

Gibt es eine Möglichkeit, meine Sammlung mit einer bestimmten Reihenfolge mit drei fileds Wert zu sortieren? Thnks

Antwort

2

Eine Möglichkeit, die Sortierreihenfolge anzupassen, besteht darin, zuerst die Argumente zuzuordnen und dann die zugeordneten Werte zu sortieren. In Ihrem Fall kann das Mapping von customerType durchgeführt werden, indem der Index in der Zeichenfolge "FHB" gefunden wird. In Java 8 könnte dies als

+1

ausgedrückt werden Ich benutze Java 6, ich werde versuchen, dies mit meiner Version von Java zu implementieren. Vielen Dank – Alex2330

Verwandte Themen