集合排序自定义比较器

时间:2016-11-12 10:34:22

标签: sorting collections comparator

我有两个班级:

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

1 个答案:

答案 0 :(得分:2)

自定义排序顺序的一种方法是首先映射参数,然后对映射的值进行排序。在你的情况下,customerType的映射可以通过在字符串&#34; FHB&#34;中找到它的索引来完成。在Java 8中,这可能表示为

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