Java比较自定义对象

我有自定义对象的ArrayList。 我需要通过不同的参数来实现排序,即年份和价格的上升和下降。 最好的方法是什么? 我想在实例化比较器期间实现Comparator并将排序模式传递给构造函数。 这是个好主意吗?

我建议每种排序类型使用不同的Comparator实现。 匿名内部类,枚举和Java SE 8(!),lambdas,是实现Comparator和其他无状态函数类对象的好方法。

您可以使用Collections.reverseOrder进行反转。

这是一种方式。 但是,如果这是一种默认方式,它才真正有意义。 请考虑以下Customer类。 通常,您始终按名称对客户进行排序。 但有时,您希望按信用额度对其进行排序。

为方便起见,实现Comparable是有意义的。 至少,您可以使比较器成为类的公共最终组件,以便用户可以轻松访问它们,并且您可以相信它们是由类的作者(或至少具有熟悉的类的工作知识的人)编写的。 )

 class Customer implements Comparable { public final Comparator byCreditLimit = new Comparator() { public int compare(Customer c1, Customer c2) { return c1.creditLimit.compareTo(c2.creditLimit); } public boolean equals(Object o) { return o == this; } } private String name; private BigDecimal creditLimit; public Customer(String name, BigDecimal creditLimit) { this.name = name; this.creditLimit = creditLimit; } public boolean equals(Object o) { if(o instanceof Customer) { Customer c = Customer(o); return name.equals(c.name); } return false; } public int hashCode() { return name.hashCode(); } public int compareTo(Customer c) { return name.compareTo(c.name); } } 

是。 自定义Comparator是一种非常好的方法。

如@Tom和@Puce所述,您可以动态反转 Comparator 的顺序 。

规范的答案是实现两个比较器 – 一个按升序排序,一个按降序排序。