按时间天分组,抽取数据算法(求一天最后一个点与第一个点的差)

本文介绍了一种按时间天数对数据进行分组的算法,该算法旨在抽取每天数据的最后一个点与第一个点之间的差值,适用于已排序的数据集。通过遍历时间集,将相同日期的数据归为一组,并计算每组内首尾数据点的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按时间天分组,抽取数据算法(求一天最后一个点与第一个点的差)

/**
*
* 前提条件数据分类大小排序好的集合
* @param dataSet 数据集[[],[],[],……]
* @param dataTS 时间集[……]
* @return
*/

public static Map<String, Object> Demo(List<List<Double>> dataSet, List<String> dataTS) {
		
		Map<String, Object> map = new HashMap<>();
		List<String> dataTime = new ArrayList<>();//得到天集合
		for (String str : dataTS) {
			dataTime.add(str.substring(0, 10));
		}
		List<String> timeResult = new ArrayList<String>();
		List<List<List<Double>>> dataTempResult = new ArrayList<List<List<Double>>>();
		String time = null;
		List<List<Double>> data = null;
		for(int i=0; i < dataTime.size(); i++) {
			data = new ArrayList<List<Double>>();
			time = dataTime.get(i)+STARTTIME;
			data.add(dataSet.get(i));
			for (int j = i+1; j < dataTime.size()+1; j++) {
				if(j < dataTime.size()) {
					if(dataTime.get(i).equals(dataTime.get(j))) {
						data.add(dataSet.get(j));
					}else {
						i = j-1;
						break;
					}
				}else {
					if(dataTime.get(i-1).equals(dataTime.get(i))) {
						data.add(dataSet.get(i));
					}else {
						i = j-1;
						break;
					}
				}
			}
			dataTempResult.add(data);
			timeResult.add(time);
		}
		//时间结果集
//		for (String list : timeResult) {
//			System.out.println(list);
//		}
		BigDecimal bg = null;
		List<Double> dataTemp = null;
		List<List<Double>> dataResult = new ArrayList<List<Double>>();
		for (int i = 0; i < dataTempResult.size(); i++) {
			List<Double> end= dataTempResult.get(i).get(dataTempResult.get(i).size()-1);
			List<Double> start= dataTempResult.get(i).get(0);
			dataTemp = new ArrayList<Double>();
			for (int j = 0; j < start.size(); j++) {
				Double num = end.get(j)-start.get(j);
				bg = new BigDecimal(num).setScale(2, BigDecimal.ROUND_HALF_UP);
				dataTemp.add(Math.abs(bg.doubleValue()));
			}
			dataResult.add(dataTemp);
		}
		/*数据结果集*/
//		for (List<Double> list : dataResult) {
//			System.out.println(list.toString());
//		}
		map.put("timeResult", timeResult);
		map.put("dataResult", dataResult);
		return map;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值