【问题标题】:How to create objects inside a loop on 2d array in Java如何在Java中二维数组的循环内创建对象
【发布时间】:2025-12-31 10:00:18
【问题描述】:

我有课

public class SimpleData() {
    String continent;
    String country;
    String city;

    public SimpleData(String continent, String country, String city) {
        this.continent = continent;
        this.country = country;
        this.city = city;
    }

}

另一个类从文件中获取数据并返回一个二维对象数组

private Object[][] getDataFromFile(String fileName) {
    return dataLoader.getTableArray(fileLocation, dataSheetName);
}

//will return something like
europe, uk, london
europe, france, paris

如何在循环二维数组并将对象添加到列表时创建 SimpleData 对象,以便 SimpleData 的每个对象代表一行数据?

private List<SimpleData> getDataList() {
    Object[][] array = readDataFromFile("myfile");
    List<SimpleData> dataList = new ArrayList<SimpleData>();

    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            //what's the code to generate object with the correct row of data?
        }
    }
    return dataList;
}

【问题讨论】:

    标签: java arrays multidimensional-array 2d


    【解决方案1】:

    代替

        for (int j = 0; j < arr[i].length; j++) {
            //what's the code to generate object with the correct row of data?
        }
    

    您将需要这个(忽略异常处理):

    dataList.add(new SimpleData(array[i][0].toString(), array[i][1].toString(), 
       array[i][2].toString()));
    

    【讨论】:

      【解决方案2】:

      在您的for 循环中,调用您的构造函数,而不是循环通过j

      for (int i = 0; i < arr.length; i++) {
          SimpleData yourData = new SimpleData(arr[i][0].toString(), arr[i][1].toString(), arr[i][2].toString());
          // Whatever you want with yourData.
      }
      

      你也可以制作一个SimpleDatas的ArrayList,例如:

      ArrayList<SimpleData> datas = new ArrayList<SimpleData>();
      for (int i = 0; i < arr.length; i++) {
          datas.add(new SimpleData(arr[i][0].toString(), arr[i][1].toString(), arr[i][2].toString()));
      }
      // Whatever you want with datas.
      

      编辑:更新为将toString 添加到每个 SimpleData 构造函数。由于这是 vizier 的解决方案,请点赞/接受他的回答。

      【讨论】:

      • SimpleData 构造函数接受字符串参数,因此您应该将对象转换为字符串。
      【解决方案3】:

      您的二维数组是否正好包含 3 列?如果是这样,这里是代码。

       private List<SimpleData> getDataList() {
          Object[][] array = readDataFromFile("myfile");
          List<SimpleData> dataList = new ArrayList<SimpleData>();
      
          for (int i = 0; i < arr.length; i++) {
              SimpleData sd = new SimpleData(array[i][0], array[i][1], array[i][2]);
              dataList.add(sd);
              }
          }
          return dataList;
      }
      

      【讨论】:

        最近更新 更多