如何使用相应的行和列格式化Java ArrayList,并调用列或行的数据?

如何使用相应的行和列格式化Java ArrayList,并调用列或行的数据?,java,arrays,csv,arraylist,Java,Arrays,Csv,Arraylist,我是一名Java初学者,我一直在尝试使用Java从我的计算机读取csv文件,并将数据插入ArrayList public class DataRepository { public void loadFile(){ ArrayList<String> binsGrade = new ArrayList<String>(); try { Scanner fileScanner = new Scanner(new File("C:\\User

我是一名Java初学者,我一直在尝试使用Java从我的计算机读取csv文件,并将数据插入ArrayList

public class DataRepository {

public void loadFile(){
    ArrayList<String> binsGrade = new ArrayList<String>();
    try {
        Scanner fileScanner = new Scanner(new File("C:\\Users\\Max\\Desktop\\Grade_SampleData.csv"));
        while(fileScanner.hasNextLine()){

            binsGrade.add(fileScanner.nextLine());
        }

        fileScanner.close();

        System.out.println(binsGrade);


    } catch (FileNotFoundException e){
        e.printStackTrace();
    }
}
}
所有的记录都在一行中,但我实际上希望它在单独的行和列中,例如,当我调用name时,我可以得到值:Michael、Amy、Johson等等。当我调用文学时,我可以得到80、85、72、80等等。然后我可能可以使用这些数据进行一些计算,比如计算平均值,或获得最高分等


虽然我已经在线搜索了一段时间,但我仍然没有找到实现这一目标的最佳方法。如果你有一分钟的时间,你能分享你的想法吗?我们将非常感谢你的帮助。谢谢

如果您想快速实现某些功能,您可以遵循并使用映射。映射的每个条目都有一个名称作为键,以及所有结果的字符串列表。例如,添加Michael:

myMap.add("Michael", Arrays.asList({"20", "12", "8", "80"}));
然后创建不同的方法,通过该映射计算平均值,或找到最大值,等等

如果您想要一种更面向对象的方法,我建议您创建表示数据的对象。首先是一个结果对象,它包含两个属性,一个字符串作为主题,一个int作为分数

public class Result {
    private String subject;
    private int score;

    public Result(String s, int i) {
        subject = s;
        score = i;
    }

    //Add Setters and Getters
    //Add additional method if required
}
其次,要有一个Person对象来代表某人。它将有两个属性,一个表示名称的字符串和一个结果对象列表

public class Person {
    private String name;
    private List<Result> results;

    public Person(String s, List<Result> r) {
        name = s;
        results = r;
    }

    //Add getters and setters
    //Add additional methods if required

    /**
     * Example of additional method
     * This one will return the score for a given subject
    **/
    public int getScore(String subject) {
        Result r = results.get(subject);
        return r.getScore();
    }

}
第三,创建一个GroupOfPerson类,该类将包含一个属性,即person列表。然后这个类将有返回平均值、最大值等的方法

public class GroupOfPerson {
    private List<Person> persons;

    public GroupOfPErson(List<Person> p) {
        persons = p;
    }

    /**
     * Example of method.
     * This one will return the average score for the given subject
    **/
    public int getAverageForSubject(String subject) {
        int average = 0;
        for(Person p : persons) {
            average += p.getScore(subject);
        }
        average /= persons.size();
        return average;
    }

    //Add other methods
}

最后,在读取CSV文件时,创建相应的对象。

使用地图为您的问题选择正确的数据结构。你想要的是一张桌子,不是一张清单。并改用CSV解析器。
public class GroupOfPerson {
    private List<Person> persons;

    public GroupOfPErson(List<Person> p) {
        persons = p;
    }

    /**
     * Example of method.
     * This one will return the average score for the given subject
    **/
    public int getAverageForSubject(String subject) {
        int average = 0;
        for(Person p : persons) {
            average += p.getScore(subject);
        }
        average /= persons.size();
        return average;
    }

    //Add other methods
}