如何将其他类中的ArrayList添加至二维ArrayList?
问题解决:将外部类的ArrayList整合到二维ArrayList中
核心思路
要把其他类的ArrayList加入二维ArrayList,只需让外部类提供获取集合的公共方法,在当前类调用后直接添加即可。同时优化代码的资源管理,避免手动关闭流的风险。
步骤1:外部类提供获取集合的方法
假设存储电表号读取逻辑的外部类为MeterNumberReader,写一个方法返回读取到的ArrayList:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; public class MeterNumberReader { public ArrayList<String> getMeterNumbers() throws IOException { ArrayList<String> mnumber = new ArrayList<>(); // try-with-resources自动关闭流,无需手动调用close try (BufferedReader bufReader = new BufferedReader(new FileReader("C:\\Users\\PCB\\Documents\\NetBeansProjects\\Billing\\src\\Files\\MeterNumber.txt"))) { String line; while ((line = bufReader.readLine()) != null) { mnumber.add(line); } } return mnumber; } }
步骤2:当前类整合数据到二维ArrayList
修改你的代码,把二维ArrayList设为成员变量方便调用,同时引入外部类的集合:
import java.io.*; import java.util.ArrayList; public class BillingHandler { // 二维ArrayList作为成员变量,方便全局调用 private ArrayList<ArrayList<String>> mdetails = new ArrayList<>(); public void filehandling() throws IOException { // 同样用try-with-resources管理写入流 try (FileWriter f = new FileWriter("C:\\Users\\PCB\\Documents\\NetBeansProjects\\Billing\\src\\Files\\MeterNumber.txt"); BufferedWriter b = new BufferedWriter(f)) { b.write("13920"); b.newLine(); b.write("32981"); b.newLine(); b.write("2399"); b.newLine(); b.write("12903"); b.newLine(); b.write("59942"); b.newLine(); b.write("58342"); b.newLine(); b.write("12324"); b.newLine(); b.write("66342"); b.newLine(); b.write("90012"); b.newLine(); b.write("55221"); } } public void initMeterDetails() throws IOException { // 实例化外部类,获取电表号集合 MeterNumberReader reader = new MeterNumberReader(); ArrayList<String> mnumber = reader.getMeterNumbers(); // 初始化其他数据集合 ArrayList<String> ccode = new ArrayList<>(); ccode.add("123468"); ccode.add("492312"); ccode.add("642344"); ccode.add("353421"); ccode.add("354332"); ccode.add("6746643"); ccode.add("7578885"); ccode.add("3949390"); ccode.add("1000348"); ccode.add("5396978"); ccode.add("1234567"); ArrayList<String> prreading = new ArrayList<>(); prreading.add("1000"); prreading.add("6000"); prreading.add("3980"); prreading.add("2300"); prreading.add("4200"); prreading.add("8000"); prreading.add("1230"); prreading.add("4222"); prreading.add("5100"); prreading.add("3000"); prreading.add(""); ArrayList<String> ctype = new ArrayList<>(); ctype.add("r"); ctype.add("r"); ctype.add("c"); ctype.add("c"); ctype.add("r"); ctype.add("c"); ctype.add("r"); ctype.add("c"); ctype.add("r"); ctype.add("r"); ctype.add(""); // 将所有集合添加到二维ArrayList中 mdetails.add(mnumber); mdetails.add(ccode); mdetails.add(prreading); mdetails.add(ctype); } // 对外提供获取二维集合的方法 public ArrayList<ArrayList<String>> getMdetails() { return mdetails; } // 示例:按用户维度获取完整信息(对应你计划的使用方式) public ArrayList<String> getUserInfo(int userIndex) { ArrayList<String> userInfo = new ArrayList<>(); for (ArrayList<String> dataColumn : mdetails) { if (userIndex < dataColumn.size()) { userInfo.add(dataColumn.get(userIndex)); } else { userInfo.add(""); } } return userInfo; } // 测试代码 public static void main(String[] args) throws IOException { BillingHandler handler = new BillingHandler(); handler.initMeterDetails(); // 获取第1个用户(索引0)的所有信息 ArrayList<String> firstUser = handler.getUserInfo(0); System.out.println("第1个用户信息:"); System.out.println("电表号:" + firstUser.get(0)); System.out.println("客户代码:" + firstUser.get(1)); System.out.println("上期读数:" + firstUser.get(2)); System.out.println("客户类型:" + firstUser.get(3)); } }
关键说明
- 资源管理:用
try-with-resources自动关闭IO流,避免因异常导致资源泄漏 - 外部类调用:只要外部类有返回ArrayList的公共方法,当前类实例化后就能直接获取并添加到二维集合
- 使用方式适配:你计划的按用户维度访问数据的需求,可以通过
getUserInfo方法实现,直接拿到指定用户的电表号、客户代码等所有关联信息
内容的提问来源于stack exchange,提问作者User123851
相关产品推荐
相关产品推荐

