首页 > 解决方案 > 在 ArrayList 中存储不同类型的对象

问题描述

我的应用程序从 csv 文件中读取数据并将其存储在对象中。我的 Load 类为此具有“load”方法,它读取 csv 并将其数据存储在两个对象中,然后将它们分组到一个 ArrayList 中,然后由该方法返回,我所指的两个对象是:

AHeader object仅存储 csv 的标题(也就是 csv 的第一行)。每 csv 的每一行动态生成一个
。 这两个对象是不同的,它们有不同的字段和不同的方法。List(ArrayList) of GameData objects

             CSV
| Game  | Map      | Players | <--- Stored in a Header object      | 
| ========================== |                                     | Want to store both 
| Game1 | Panguea  | 6       | <--- | Stored in an ArrayList       | the Header and the ArrayList
| Game2 | Panguea  | 8       | <--- | containing the three objects | in a new ArrayList.
| Game3 | Medium   | 12      | <--- |                              |                                    

这里的问题是我不能将两个不同类型的对象放入同一个 ArrayList 中,我想知道如何做到这一点(或者甚至可能),因为我希望“加载”方法返回单个 ArrayList 所以我可以将它用于其他功能,例如我有Printer class一个方法,可以打印传递给它的对象。

这是完成这项工作的方法:

public List<GameData> load(){
// List for store the data which is brought by the scanner
        mainView = new ArrayList<>();

// Scanner eluded for clarity

// Get the headers 
        String[] tableHeader = scanner.nextLine().split("\\t");
        headerFields = new Headers(tableHeader);
        mainView.add(headerFields);    

// Get the rest of the data
        while (scanner.hasNextLine()) {
            try{
                String[] elements = scanner.nextLine().split("\\t");
                mainView.add(new GameData(some params...);
            }catch (ArrayIndexOutOfBoundsException e){
                System.out.println(e);
            }
        }
        return mainView;
    }

PD:我不能只使用一个对象来存储所有数据,因为标题(csv 的第一行)都是字符串,而 csv 中的其余行包含字符串和 int 值的混合。同样从结构上讲,它没有意义,因为每个对象都会有这些标头,这将是多余的,因为这些对象已经具有同名的字段。

标签: java

解决方案


在我看来,“Header”对象和“GameData”对象总是一起使用。如果你制作了一个“游戏”对象,它有

  • ArrayList 类型的“标签”实例变量
  • ArrayList 类型的“游戏”实例变量

并返回整个对象?已经过了一分钟,但我很确定您可以创建一个私有类,这实际上会使您的代码更具可读性。


推荐阅读