2

*免责声明:我是java中的超级菜鸟,所以请耐心等待。

我有一个名为的数组hw_list列表,其中包含从文件中读取的字符串,如下所示:

    [Doe John 1 10 1 Introduction.java, Doe Jane 1 11 1 Introduction.java, Smith Sam 2 15 2 Introduction.java Test.java]

我能够将数组的每个元素都设为自己的子列表,因此打印如下:

    [Doe John 1 10 1 Introduction.java] 
    [Doe Jane 1 11 1 Introduction.java]
    [Smith Sam 2 15 2 Introduction.java Test.java]

但是要将每个元素拆分成它自己的子列表,就像上面一样,我必须手动写出每个子列表,如下所示:

    List<String> student1 = hw_list.subList(0, 1);
    List<String> student2 = hw_list.subList(1, 2);
    List<String> student3 = hw_list.subList(2, 3);

我的问题是读入的字符串数量可能会改变,所以我不知道要提前制作多少子列表。

有没有办法使用循环动态创建新列表,然后基于拆分每个元素hw_list.size()

有没有可能是这样的:

    for(int i=0; i<hw_list.size(); i++){
        List<String> student(i) = hw_list.sublist(i, i+1)
    }

TL;博士

如何获得一个循环来为数组的每个元素创建一个新列表?

4

2 回答 2

1

您编写的代码运行良好,逻辑上没有意义:您拥有的单项子列表无法通过添加更多元素来扩展,它们也会随着底层数组列表而改变。

您应该做的是构建一个类,将存储在单个元素中的数据表示为一组相关的、有意义的项目,例如名字、姓氏、部分和提交日期,如下所示:

public class Student {
    private String firstName;
    private String lastName;
    private List<String> fileNames;
    private int section;
    private int date; // Consider changing this to a different type
    public Student(String firstName, String lastName, int section, int date) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.section = section;
        this.date = date;
        fileNames = new ArrayList<String>();
    }
    public String getFirstName() { return firstName; }
    public String getLastName() { return lastName; }
    public int getSection() { return section; }
    public int getDateSubmitted() { return date; }
    public List<String> getFileNames() { return fileNames; }
}

然后您可以创建一个方法,该方法采用 aString并产生 a Student,如下所示:

private static Student studentFromString(String studentRep) {
    String[] tokens = studentRep.split(" ");
    Student res = new Student(tokens[0], tokens[1], Integer.parseInt(tokens[2]), Integer.parseInt(tokens[3]));
    // You can ignore tokens[4] because you know how many files are submitted
    // by counting the remaining tokens.
    for (int i = 5 ; i != tokens.length ; i++) {
        res.getFileNames().add(tokens[i]);
    }
    return res;
}
于 2013-10-13T15:32:00.193 回答
1

遵循 dasblinkenlight 的建议后,将每个字符串转换为学生:

List<Student> students = new ArrayList<Student>();
for(String studentRep:hw_list){
    students.add(Student.studentFromString(studentRep));
}

然后你可以对你的学生列表做一些事情,像这样:

for(Student student:students){
    System.out.println(student.getFirstName());
}
于 2013-10-13T15:38:33.823 回答