list集合使用

目录

方法

场景题

1、集合内的数据累加

[2、集合内500条数据,每个数据对象List 值,Listi与Listi相加求均值](#2、集合内500条数据,每个数据对象List 值,List[i]与List[i]相加求均值)


方法

场景题

1、集合内的数据累加

java 复制代码
// 遍历源数据计算总和

// 初始化计算参数
int dataCount = drivingList.size();
double validValueSum = 0.0;
double totalPowerSum = 0.0;
for (SetDriving driving : drivingList) {
    // 1. 计算有效值和总功率的总和
    if (driving.getValidValue() != null) {
        validValueSum += driving.getValidValue();
    }
    if (driving.getTotalPower() != null) {
        totalPowerSum += driving.getTotalPower();
    }
// 设置平均值(处理空数据情况,避免0.0不合理,建议用null)
Double validValue = calculateAverage(validValueSum, dataCount);
Double totalPower = calculateAverage(totalPowerSum, dataCount);

2、集合内500条数据,每个数据对象List<folat> 值,Listi与Listi相加求均值

java 复制代码
// 频谱(假设固定长度为500)
List<Float> avgFftBufList = new ArrayList<>(Collections.nCopies(500, 0.0f));
// 记录每个索引的有效数据条数(用于处理部分数据长度不足的情况)
int[] fftCount = new int[500];

List<Float> fftBufList = setDrivingProto.getFftBufList();

 // 累加频谱数据(确保列表长度为500,避免数组越界)
 for (int i = 0; i < Math.min(fftBufList.size(), 500); i++) {
    //替换list,i位[avgFftBufList第i位值+fftBufList第i位值]
    avgFftBufList.set(i, avgFftBufList.get(i) + fftBufList.get(i));
     // 记录该索引的有效数据条数
      fftCount[i]++;
 }


// 计算频谱和PSD的平均值(处理有效数据条数为0的情况)
for (int i = 0; i < 500; i++) {
    if (fftCount[i] > 0) {
        avgFftBufList.set(i, avgFftBufList.get(i) / avgFftBufList.size());
    }
}
java 复制代码
         // 初始化计算参数
            int dataCount = drivingList.size();
            double validValueSum = 0.0;
            double totalPowerSum = 0.0;

            // 频谱和PSD的平均值列表(假设固定长度为500,与源数据一致)
            List<Float> avgFftBufList = new ArrayList<>(Collections.nCopies(500, 0.0f));
            List<Float> avgPsdBufList = new ArrayList<>(Collections.nCopies(500, 0.0f));

            // 记录每个索引的有效数据条数(用于处理部分数据长度不足的情况)
            int[] fftCount = new int[500];
            int[] psdCount = new int[500];

            // 遍历源数据计算总和
            for (SetDriving driving : drivingList) {
                // 1. 计算有效值和总功率的总和
                if (driving.getValidValue() != null) {
                    validValueSum += driving.getValidValue();
                }
                if (driving.getTotalPower() != null) {
                    totalPowerSum += driving.getTotalPower();
                }

                // 2. 处理文件路径中的频谱和PSD数据
                String filePath = driving.getFilePath();
                if (filePath != null && !filePath.isEmpty()) {

                    InputStream inputStream = null;
                    try {
                        // 从MinIO获取文件流
                        inputStream = minioUtil.downFileStream(filePath, "das");
                        if (inputStream == null) {
                            log.error("文件流为空,路径:{}", filePath);
                            return;
                        }
                        // 解析文件数据
                        DrivingProto.Driving drivingDataObject = SectionDataParseUtil.getDrivingDataObject(inputStream);
                        List<Float> fftBufList = drivingDataObject.getFftBufList();
                        List<Float> psdBufList = drivingDataObject.getPsdBufList();

                        // 累加频谱数据(确保列表长度为500,避免数组越界)
                        for (int i = 0; i < Math.min(fftBufList.size(), 500); i++) {
                            avgFftBufList.set(i, avgFftBufList.get(i) + fftBufList.get(i));
                            // 记录该索引的有效数据条数
                            fftCount[i]++;
                        }

                        // 累加PSD数据
                        for (int i = 0; i < Math.min(psdBufList.size(), 500); i++) {
                            avgPsdBufList.set(i, avgPsdBufList.get(i) + psdBufList.get(i));
                            psdCount[i]++;
                        }
                    } catch (Exception e) {
                        log.error("解析文件失败,路径:{}", filePath, e);
                    } finally {
                        // 强制关闭流,避免资源泄漏
                        if (inputStream != null) {
                            try {
                                inputStream.close();
                            } catch (Exception e) {
                                log.error("关闭文件流失败", e);
                            }
                        }
                    }
                }
            }

            // 计算频谱和PSD的平均值(处理有效数据条数为0的情况)
            for (int i = 0; i < 500; i++) {
                if (fftCount[i] > 0) {
                    avgFftBufList.set(i, avgFftBufList.get(i) / avgFftBufList.size());
                }

                if (psdCount[i] > 0) {
                    avgPsdBufList.set(i, avgPsdBufList.get(i) / avgPsdBufList.size());
                }
            }

            // 设置平均值(处理空数据情况,避免0.0不合理,建议用null)
            Double validValue = calculateAverage(validValueSum, dataCount);
            Double totalPower = calculateAverage(totalPowerSum, dataCount);

}


/**
     * 抽取计算平均值的方法
     *
     * @param sum
     * @param count
     * @return
     */
    private Double calculateAverage(double sum, int count) {
        return count > 0 ? sum / count : null;
    }
相关推荐
xiangyun612 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun612 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
OKkankan4 小时前
LangChain 能力详解!:输出解析、RAG、向量数据库与 Retriever 检索器
数据结构·python·langchain·ai应用
蓝速科技4 小时前
便民服务大厅 AI 数字人一体机场景适配与落地指南丨蓝速科技
大数据·网络·数据结构·人工智能·自然语言处理·数据分析·运维开发
302wanger4 小时前
推荐下我的两个AI信息源
算法
索尔~古德曼4 小时前
CF——错题的集合
算法
xxwxx__4 小时前
C++ AVL 树深度剖析:平衡二叉搜索树原理、源码与面试考点
数据结构·c++
SL_staff4 小时前
JVS-Logic:从页面配置工具到企业级业务逻辑中枢的技术演进
java·算法·全栈
Logic1014 小时前
C语言/数据结构数组题解:数字列表加一(Plus One)——进位处理与数组扩展
c语言·数据结构·模拟·数组·时间复杂度·算法题·进位
陌シ未央ゞ4 小时前
基于BM25算法和RRF实现的混合索引(java版)
人工智能·spring boot·后端·算法