2011-12-08 9 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は時々このフォーマット「1943年2月13日」であるdatebirthで比較するコンパレータを作成したいです、時々、「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

あなたはそのを使用して誕生日を保存したい場合適切なタイプ - a 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はnullでもかまいません。 – Nico

+0

5年遅れです。もちろん、OPはそれをすべてチェックしなければなりません。これは、実例コードではなく、実例として意図されていました。 – duffymo

1

私はUNIX時間を持っている限り、あなたのJavaコードで日付を保存示唆しますそれはプラットフォーム間でより信頼できます。また、区切り文字を使用して日付を手動で分割することもできます。したがって、 ' - 'が区切り文字であれば、 '/'が存在する場合は代わりにそれを使用して分割します。

そうすれば、日、月、年を抽出して日付オブジェクトを構成できます。

-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はnullでもかまいません – Nico