如何通过多个字段比较对象

如何通过多个字段比较对象

假设您有一些有几个字段的对象,它们可以通过以下方法进行比较:

public class Person {

    private String firstName;
    private String lastName;
    private String age;

    /* Constructors */

    /* Methods */}

因此,在这个例子中,当您问:

a.compareTo(b) > 0

你可能会问,一个人的姓是否在乙之前,或者甲比乙老,等等.

在不增加不必要的杂乱或开销的情况下,实现这类对象之间的多个比较的最干净的方法是什么?

  • java.lang.Comparable

    接口只允许一个字段进行比较。
  • 添加许多比较方法(即

    compareByFirstName()compareByAge()

    等等)在我看来是乱七八糟的。

那么,做这件事最好的方法是什么呢?


绝地无双
浏览 876回答 3
3回答

函数式编程

您可以实现Comparator两个比较Person对象,您可以检查任意多个字段。您可以在您的比较器中输入一个变量,它告诉它要比较哪个字段,尽管只编写多个比较器可能更简单。

ibeautiful

使用Java 8:Comparator.comparing((Person p)->p.firstName)           .thenComparing(p->p.lastName)           .thenComparingInt(p->p.age);如果您有访问器方法,那么:Comparator.comparing(Person::getFirstName)           .thenComparing(Person::getLastName)           .thenComparingInt(Person::getAge);如果一个类实现了可比,那么这种比较器可以用于比较方法:@Overridepublic int compareTo(Person o){     return Comparator.comparing(Person::getFirstName)               .thenComparing(Person::getLastName)               .thenComparingInt(Person::getAge)               .compare(this, o);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java