Сравнить объект по датам (реализует компаратор) - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть объект java People:

public class People {

        String lastname;
        String firstname;
        String gender;
        String datebirth;
        String fcolor;

        public People(String lastname, String firstname, String gender,String datebirth, String fcolor) {
                this.lastname = lastname;
                this.firstname = firstname; 
                this.gender = gender;
                this.datebirth = datebirth;
                this.fcolor = fcolor;
        }
        public String getLastname() {
                return lastname;
        }
        public String getFirstname() {
                return firstname;
        }
        public String getGender() {
                return gender;
        }
        public String getFcolor() {
                return fcolor;
        }
        public String getDatebirth() {
                return datebirth;
        }        
}

Я хочу создать Компаратор для сравнения по дате рождения (дата рождения иногда в этом формате «13.02.1943», иногда в этом формате «2-13-1943»), можете ли вы помочь мне с его реализацией.

Я начал это, но запутался:

import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.text.DateFormat;

public class CompareDateBirth implements Comparator<People>{

        public int compare(People p, People q) {

                 DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
                 Date Pdate = null;
                 Date Qdate= null;
                    try {
                    Pdate = df.parse(p.getDatebirth());
                    Qdate = df.parse(q.getDatebirth());
                    } catch (Exception e) {
                    e.printStackTrace();
                    }    
                      return Pdate.compareTo(Qdate) > 0 ? 1 : 0;
        }
}

Ответы [ 3 ]

10 голосов
/ 08 декабря 2011

Если бы вы хранили дату рождения, используя правильный тип - объект java.util.Date вместо String - у вас не было бы этой проблемы.Форматирование - это проблема отображения.

Класс с именем «Люди»?

Вот как я могу это сделать (все нижеуказанные классы в отдельных файлах .java в пакете с именем model):

package model;

public enum Gender { MALE, FEMALE }

public class Person {
    private String firstName;
    private String lastName;
    private Gender gender;
    private Date birthDate;  // I'd make sure to set hh:mm:ss all to midnight

    // constructors, getters, equals, hashCode, and toString are left for you
}

public class BirthDateComparator implements Comparator<Person> {
    public int compare(Person p, Person q) {
        if (p.getBirthDate().before(q.getBirthDate()) {
            return -1;
        } else if (p.getBirthDate().after(q.getBirthDate()) {
            return 1;
        } else {
            return 0;
        }        
    }
}
1 голос
/ 08 декабря 2011

Я предлагаю сохранить дату в вашем java-коде как длинную с временем UNIX этой даты, она более надежна для разных платформ. Также вы можете вручную разделить дату, используя разделитель, поэтому, если есть «-», тогда это ваш разделитель, в противном случае, если существует «/», тогда вы разделите, используя вместо этого.

Таким образом, вы можете извлечь день, месяц и год и построить объект даты.

0 голосов
/ 14 декабря 2014
Public class BirthDateComparator implements java.util.Comparator<Person> {
   public int compare(Person p1, Person p2) {
        return p1.getBirthDate().compareTo(p2.getBirthDate());
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...