package com.ruoyi.rocketmq.utils; import com.ruoyi.common.core.utils.DateUtils; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; public class EchartsDataUtils { /** * 构建ECharts图表数据 * @param list 原始数据列表 * @param timeExtractor 时间字段提取函数 * @param dataExtractors 数据提取器Map (key: 数据名称, value: 数据提取函数) * @param 数据类型泛型 * @return 包含xData和yData的Map */ public static Map buildEchartsData( List list, Function timeExtractor, Map> dataExtractors) { // 按时间排序 List sortedList = list.stream() .sorted(Comparator.comparing(timeExtractor)) .collect(Collectors.toList()); // 准备X轴数据 List xAxisData = sortedList.stream() .map(item -> DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", timeExtractor.apply(item))) .collect(Collectors.toList()); // 准备Y轴数据 Map yData = new LinkedHashMap<>(); dataExtractors.forEach((name, extractor) -> { yData.put(name, sortedList.stream().map(extractor).collect(Collectors.toList())); }); // 构建返回结果 Map result = new HashMap<>(); result.put("xData", xAxisData); result.put("yData", yData); return result; } /** * 微秒转秒 */ public static double convertMicrosecondsToSeconds(long microseconds) { return microseconds / 1_000_000.0; } }