Как сравнивать объекты по нескольким полям - PullRequest
190 голосов
/ 15 декабря 2008

Предположим, у вас есть несколько объектов, у которых есть несколько полей, с которыми они могут сравниваться:

public class Person {

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

    /* Constructors */

    /* Methods */

}

Так что в этом примере, когда вы спрашиваете:

a.compareTo(b) > 0

возможно, вы спрашиваете, стоит ли фамилия a перед буквой b, или если a старше b и т. Д. *

Каков самый чистый способ включить множественное сравнение между этими типами объектов без добавления ненужных помех или накладных расходов?

  • java.lang.Comparable интерфейс позволяет сравнивать только по одному полю
  • Добавление многочисленных методов сравнения (т. Е. compareByFirstName(), compareByAge() и т. Д.), На мой взгляд, загромождено.

Так, как лучше всего это сделать?

Ответы [ 21 ]

0 голосов
/ 23 марта 2012

Это легко сделать с помощью библиотеки Google Guava .

например. Objects.equal(name, name2) && Objects.equal(age, age2) && ...

Больше примеров:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...