package com.jjt.biz.util; import com.jjt.biz.vo.ScoreVO; import java.util.*; import java.util.stream.Collectors; /** * DataUtil$ * * @author wukai * @date 2024/10/16 01:52 */ public class DataUtil { /** * 补数据 * * @param standTime * @param result */ public static void standTimeVO(List standTime, List result) { for (ScoreVO vo : result) { // 创建一个新的 times 和 scores 列表,以确保它们与标准时间序列对齐 List alignedTimes = new ArrayList<>(); List alignedScores = new ArrayList<>(); // 使用一个Map来存储原始数据,以便快速查找 Map timeScoreMap = new HashMap<>(); List times = vo.getXData(); List scores = vo.getScores(); for (int i = 0; i < times.size(); i++) { timeScoreMap.put(times.get(i), scores.get(i)); } // 遍历标准时间序列,并根据需要添加空值或实际值 for (String time : standTime) { alignedTimes.add(time); // 添加时间 Float score = timeScoreMap.getOrDefault(time, 100F); // 如果没有对应的分数,则添加0.0f alignedScores.add(score); } // 更新原有的 times 和 scores 列表 times.clear(); times.addAll(alignedTimes); scores.clear(); scores.addAll(alignedScores); } } /** * 补数据 * * @param standTime * @param result */ public static void standTimeMap(List standTime, List> result) { for (Map map : result) { // 创建一个新的 times 和 scores 列表,以确保它们与标准时间序列对齐 List alignedTimes = new ArrayList<>(); List alignedScores = new ArrayList<>(); // 使用一个Map来存储原始数据,以便快速查找 Map timeScoreMap = new HashMap<>(); List times = (List) map.get("time"); List scores = (List) map.get("score"); for (int i = 0; i < times.size(); i++) { timeScoreMap.put(times.get(i), scores.get(i)); } // 遍历标准时间序列,并根据需要添加空值或实际值 for (String time : standTime) { alignedTimes.add(time); // 添加时间 Float score = timeScoreMap.getOrDefault(time, 100F); // 如果没有对应的分数,则添加0.0f alignedScores.add(score); } // 更新原有的 times 和 scores 列表 times.clear(); times.addAll(alignedTimes); scores.clear(); scores.addAll(alignedScores); } } /** * 补数据 * * @param standTime * @param result */ public static void standTimeNet(List standTime, List> result) { for (Map map : result) { // 创建一个新的 times 和 scores 列表,以确保它们与标准时间序列对齐 // 使用一个Map来存储原始数据,以便快速查找 Map timeScoreMap = new HashMap<>(); List> trendList = (List>) map.get("data"); List> newTrend = new ArrayList<>(); Map map1 = trendList.stream().collect(Collectors.toMap(mp -> (Date) mp.get("time"), mp -> (Float) mp.get("value"))); for (Date d : map1.keySet()) { timeScoreMap.put(d, map1.get(d)); } // 遍历标准时间序列,并根据需要添加空值或实际值 for (Date time : standTime) { Map map2 = new HashMap<>(16); map2.put("time", time); map2.put("value", timeScoreMap.getOrDefault(time, 0F)); newTrend.add(map2); } map.remove("data"); map.put("data", newTrend); } } }