Files
saas-houduan/ruoyi-rocketmq/src/main/java/com/ruoyi/rocketmq/utils/EchartsDataUtils.java

53 lines
1.7 KiB
Java

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 <T> 数据类型泛型
* @return 包含xData和yData的Map
*/
public static <T> Map<String, Object> buildEchartsData(
List<T> list,
Function<T, Date> timeExtractor,
Map<String, Function<T, ?>> dataExtractors) {
// 按时间排序
List<T> sortedList = list.stream()
.sorted(Comparator.comparing(timeExtractor))
.collect(Collectors.toList());
// 准备X轴数据
List<String> xAxisData = sortedList.stream()
.map(item -> DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", timeExtractor.apply(item)))
.collect(Collectors.toList());
// 准备Y轴数据
Map<String, Object> yData = new LinkedHashMap<>();
dataExtractors.forEach((name, extractor) -> {
yData.put(name, sortedList.stream().map(extractor).collect(Collectors.toList()));
});
// 构建返回结果
Map<String, Object> 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;
}
}