我有两个班级:
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
我有一个Invoice对象的arrayList,我想按特定的顺序使用customerType属性对它进行排序:所有发票都带有customerType" F"那些有" H"那么" B"。
我尝试实现Comparator接口,但问题是他的方法比较采用了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值的特定订单对我的集合进行排序? Thnks
答案 0 :(得分:2)
自定义排序顺序的一种方法是首先映射参数,然后对映射的值进行排序。在你的情况下,customerType
的映射可以通过在字符串&#34; FHB&#34;中找到它的索引来完成。在Java 8中,这可能表示为
Collections.sort(invoicesList, Comparator.comparingInt(
(invoice) -> "FHB".indexOf( invoice.getCustomer().getCustomerType() )));