为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

绝地无双 2019-06-17 17:09:39
如何通过多个字段比较对象假设您有一些有几个字段的对象,它们可以通过以下方法进行比较:public class Person {     private String firstName;     private String lastName;     private String age;     /* Constructors */     /* Methods */}因此,在这个例子中,当您问:a.compareTo(b) > 0你可能会问,一个人的姓是否在乙之前,或者甲比乙老,等等.在不增加不必要的杂乱或开销的情况下,实现这类对象之间的多个比较的最干净的方法是什么?java.lang.Comparable接口只允许一个字段进行比较。添加许多比较方法(即compareByFirstName(), compareByAge()等等)在我看来是乱七八糟的。那么,做这件事最好的方法是什么呢?
查看完整描述

3 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

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


查看完整回答
反对 回复 2019-06-17
?
ibeautiful

TA贡献1993条经验 获得超5个赞

使用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);}


查看完整回答
反对 回复 2019-06-17
  • 3 回答
  • 0 关注
  • 875 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号