[英]Compare Object by dates ( implements Comparator)
我有一个 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;
}
}
我想创建一个比较器来按日期进行比较(日期有时采用这种格式“2/13/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;
}
}
如果您使用正确的类型存储出生日期 - 一个java.util.Date
对象而不是一个String
- 你就不会遇到这个问题。 格式是显示问题。
一个名为“人”的班级?
这是我可能会这样做的方法(以下所有类位于名为 model 的包中的单独 .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;
}
}
}
我建议将 Java 代码中的日期保存为具有该日期的 UNIX 时间的 long,它跨平台更可靠。 您也可以使用分隔符手动拆分日期,因此,如果有“-”,则这是您的分隔符,否则,如果存在“/”,则使用它进行拆分。
这样您就可以提取日、月和年并构造日期对象。
Public class BirthDateComparator implements java.util.Comparator<Person> {
public int compare(Person p1, Person p2) {
return p1.getBirthDate().compareTo(p2.getBirthDate());
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.