2011-12-08 68 views
0

我有一个java人反对:通过日期,比较对象(实现比较)

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; 
     }   
} 

我想建立一个比较器通过datebirth比较(datebirth有时这种格式的“1943年2月13日”,有时这种格式的“1943年2月13日”,你能帮助我如何实现它

我开始,但是糊涂了:

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; 
     } 
} 

回答

9

如果您想使用存储出生日期的正确的类型 - java.util.Date个对象而不是String - 你不会有这个问题。格式化是一个显示问题。

一个名为“People”的类?

这里是我怎么可能做到这一点(下面的所有类单独.java文件名为模型包):

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; 
     }   
    } 
} 
+0

非常感谢您的帮助。我想现在有一个比较器,比较性别(女性在男性之前),然后姓氏升序,谢谢你的帮助表示赞赏。 – akram

+0

警告,p或q可能为空。 – Nico

+0

五年来不及。当然,OP应该检查所有这些。它只是作为一个例子,而不是生产代码。 – duffymo

1

我建议保存在Java代码中的日期作为一项长期的具有UNIX时间那一天,它在各个平台上更可靠。你也可以使用分隔符手动分割日期,所以如果有' - '那么这是你的分隔符,否则如果存在'/',那么你使用它来分割。

这样你就可以提取日,月和年并构建日期对象。

-1
Public class BirthDateComparator implements java.util.Comparator<Person> { 
    public int compare(Person p1, Person p2) { 
     return p1.getBirthDate().compareTo(p2.getBirthDate()); 
    } 
} 
+0

警告p1或p2可能为空 – Nico