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

Java嵌套ArrayList元素计数及Android WiFi扫描结果存储技术问询

嘿,我来帮你搞定这两个问题!😊

问题1:获取Java中嵌套ArrayList的元素数量

如果你的嵌套ArrayList是两层结构(比如ArrayList<ArrayList<T>>),最直接的方式就是遍历每一个内层列表,累加它们的元素数量。这里给你两种实现方式:

方式1:普通循环遍历

// 示例:两层嵌套的字符串列表
ArrayList<ArrayList<String>> nestedList = new ArrayList<>();
// 添加测试数据
nestedList.add(new ArrayList<>(List.of("Java", "Kotlin")));
nestedList.add(new ArrayList<>(List.of("Android")));
nestedList.add(new ArrayList<>(List.of("Spring", "MyBatis", "Redis")));

int totalElements = 0;
for (ArrayList<String> innerList : nestedList) {
    totalElements += innerList.size();
}

System.out.println("总元素数量:" + totalElements); // 输出6

方式2:Java 8+流式写法(更简洁)

int totalElementsStream = nestedList.stream()
                                    .mapToInt(ArrayList::size)
                                    .sum();
System.out.println("总元素数量(流式):" + totalElementsStream); // 同样输出6

如果是多层嵌套(比如三层及以上),可以用递归方法来统计:

public static <T> int countNestedElements(ArrayList<?> list) {
    int count = 0;
    for (Object element : list) {
        if (element instanceof ArrayList<?>) {
            // 如果当前元素还是列表,递归统计
            count += countNestedElements((ArrayList<?>) element);
        } else {
            // 不是列表,计数+1
            count++;
        }
    }
    return count;
}

问题2:Android WiFi扫描结果存入ScanObject类型的ArrayList

先看你给出的代码片段,有几个小问题需要修正,我帮你完善并解释:

修正后的完整代码

// 系统提供的扫描结果列表(假设已经通过WiFiManager正确获取)
private List<ScanResult> results;
// 修正初始化错误:ArrayList构造需要加括号
private ArrayList<ScanObject> scanObjectList = new ArrayList<>();

// 处理扫描结果的逻辑
public void processScanResults() {
    // 先判空,避免空指针异常
    if (results == null || results.isEmpty()) {
        return;
    }

    // 用增强for循环遍历扫描结果,比普通for更简洁
    for (ScanResult scanResult : results) {
        String macAddress = scanResult.BSSID; // 获取WiFi的MAC地址
        int rssiValue = scanResult.level;     // 获取信号强度

        // 创建ScanObject实例(确保你的ScanObject有对应的构造方法)
        ScanObject scanObject = new ScanObject(macAddress, rssiValue);
        // 添加到目标列表中
        scanObjectList.add(scanObject);
    }

    // 可选:验证结果,打印到Logcat
    for (ScanObject obj : scanObjectList) {
        Log.d("WiFiScan", "MAC: " + obj.getMac() + " | RSSI: " + obj.getRssi());
    }
}

必要的补充说明

  1. ScanObject类的正确实现
    你需要确保ScanObject类有匹配的构造方法,并且提供getter方法方便后续获取数据:

    public class ScanObject {
        private String mac;
        private int rssi;
    
        // 构造方法,参数类型要和你传入的一致
        public ScanObject(String mac, int rssi) {
            this.mac = mac;
            this.rssi = rssi;
        }
    
        // Getter方法
        public String getMac() {
            return mac;
        }
    
        public int getRssi() {
            return rssi;
        }
    }
    
  2. Android权限配置
    要扫描WiFi网络,需要在AndroidManifest.xml中添加以下权限,Android 6.0+还需要动态申请定位权限:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
  3. 获取扫描结果的正确流程
    你需要通过WiFiManager启动扫描,并注册广播接收器监听扫描完成的广播,才能拿到results列表:

    // 初始化WiFiManager
    WiFiManager wifiManager = (WiFiManager) getSystemService(Context.WIFI_SERVICE);
    // 启动扫描
    wifiManager.startScan();
    
    // 注册广播接收器监听扫描结果
    BroadcastReceiver scanReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            boolean success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false);
            if (success) {
                // 获取扫描结果
                results = wifiManager.getScanResults();
                // 调用处理方法
                processScanResults();
            }
        }
    };
    
    // 注册广播
    IntentFilter filter = new IntentFilter(WifiManager.WIFI_SCAN_RESULTS_AVAILABLE_ACTION);
    registerReceiver(scanReceiver, filter);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:17:50