How to compare objects by multiple fields

后端 未结 22 2569
暖寄归人
暖寄归人 2020-11-22 00:43

Assume you have some objects which have several fields they can be compared by:

public class Person {

    private String firstName;
    private String lastN         


        
22条回答
  •  时光说笑
    2020-11-22 01:17

    With Java 8:

    Comparator.comparing((Person p)->p.firstName)
              .thenComparing(p->p.lastName)
              .thenComparingInt(p->p.age);
    

    If you have accessor methods:

    Comparator.comparing(Person::getFirstName)
              .thenComparing(Person::getLastName)
              .thenComparingInt(Person::getAge);
    

    If a class implements Comparable then such comparator may be used in compareTo method:

    @Override
    public int compareTo(Person o){
        return Comparator.comparing(Person::getFirstName)
                  .thenComparing(Person::getLastName)
                  .thenComparingInt(Person::getAge)
                  .compare(this, o);
    }
    

提交回复
热议问题