Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java我们可以保持正则表达式匹配作为散列值吗?_Java_Sorting_Hashmap - Fatal编程技术网

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对其进行排序。