按时间天分组,抽取数据算法(求一天最后一个点与第一个点的差)
/**
*
* 前提条件数据分类大小排序好的集合
* @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;
}