You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将其他类中的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));
    }
}

关键说明

  1. 资源管理:用try-with-resources自动关闭IO流,避免因异常导致资源泄漏
  2. 外部类调用:只要外部类有返回ArrayList的公共方法,当前类实例化后就能直接获取并添加到二维集合
  3. 使用方式适配:你计划的按用户维度访问数据的需求,可以通过getUserInfo方法实现,直接拿到指定用户的电表号、客户代码等所有关联信息

内容的提问来源于stack exchange,提问作者User123851

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:12:03