Java我们可以保持正则表达式匹配作为散列值吗?
我有一个包含姓名和出生日期的文本文件,我需要按日期排序,如Java我们可以保持正则表达式匹配作为散列值吗?,java,sorting,hashmap,Java,Sorting,Hashmap,我有一个包含姓名和出生日期的文本文件,我需要按日期排序,如 Fname LastName dd-MM-yyyy Fname2 Lname2 dd-MM-yyyy Fname3 Lname3 dd-MM-yyyy Fname4 Lname4 dd-MM-yyyy Fname5 Lname5 dd-MM-yyyy 我可以通过匹配正则表达式(如\\d\\d-\\d\\d-\\d\\d\\d)和名称作为散列键,将DOB作为散列值,这样按DOF排序就很容易了。或者建议我如何将其拆
Fname LastName dd-MM-yyyy
Fname2 Lname2 dd-MM-yyyy
Fname3 Lname3 dd-MM-yyyy
Fname4 Lname4 dd-MM-yyyy
Fname5 Lname5 dd-MM-yyyy
我可以通过匹配正则表达式(如\\d\\d-\\d\\d-\\d\\d\\d)和名称作为散列键,将DOB作为散列值,这样按DOF排序就很容易了。或者建议我如何将其拆分为第[0]列第[1]列,以便第[1]列具有日期。您的第一个问题是,确定如何拆分名称并不容易。有些姓有空格,有些姓有空格:
Jill St. John
Billy Bob Thornton
我建议添加一个分隔符,以便更轻松地解决此问题
然后,将name和DOB字段封装在一个名为Person的类中
将您的人员添加到列表中。然后可以实现对列表进行排序
使用哈希值的问题在于garden variery HashMap和TreeMap类中不允许重复。也就是说,如果两个人的生日在同一天,其中一个人的生日将被覆盖。您必须从文件中提取这些数据。因此,我建议为数据创建类并实现一个可比较的接口:
public class Person implements Comparable<Person> {
static final SimpleDateFormat DATE_PARSER = new SimpleDateFormat("dd-MM-yyyy");
String firstName;
String lastName;
Date dateOfBirth;
public Person(String firstName, String lastName, String dateOfBirth) throws ParseException {
this.firstName = firstName;
this.lastName = lastName;
this.dateOfBirth = DATE_PARSER.parse(dateOfBirth);
}
@Override
public int compareTo(Person o) {
return this.dateOfBirth.compareTo(o.dateOfBirth);
}
}
现在,在读取过程中,只需将所有这些记录放入实现中,例如:。您还可以将记录存储到数组或列表中,并使用或类对其进行排序。最重要的是实现Comparable。您是否考虑过创建一个DateOfBirth对象,其名称和日期代表您的条目?通过实现Comparable ou并创建一个比较器,您可以轻松地对它们进行排序。我做了类似的操作将SortedSet允许重复的DOB?排序答案是否。通常,集合不允许重复。如果需要有重复项,请使用列表实现,例如ArrayList,并使用Collections.sortpersonList对其进行排序。