表结构
DROP TABLE IF EXISTS `energy`;
CREATE TABLE `energy` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`price` decimal(10,2) DEFAULT NULL,
`date` varchar(20) DEFAULT NULL,
`water` decimal(10,0) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
表数据初始化代码
package com.example.demo.service.impl;
import com.example.demo.bean.Energy;
import com.example.demo.repository.EnergyRepository;
import com.example.demo.service.EnergyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.stream.Collectors;
@Component
public class EnergyServiceImpl implements EnergyService {
@Autowired
EnergyRepository energyRepository;
public static ArrayList<String> deviceList= new ArrayList<String>(10);
public static ArrayList<String> dateList= new ArrayList<String>(11);
static {
deviceList.add("设备1");
deviceList.add("设备2");
deviceList.add("设备3");
deviceList.add("设备4");
deviceList.add("设备5");
deviceList.add("设备6");
deviceList.add("设备7");
deviceList.add("设备8");
deviceList.add("设备9");
deviceList.add("设备10");
deviceList.add("设备11");
dateList.add("01-01");
dateList.add("01-02");
dateList.add("01-03");
dateList.add("01-04");
dateList.add("01-05");
dateList.add("01-06");
dateList.add("01-07");
dateList.add("01-08");
dateList.add("01-09");
dateList.add("01-10");
dateList.add("01-11");
}
@Override
public void initEnergyData() {
Random r = new Random();
for (int i = 1; i < 2001; i++) {
int random = r.nextInt(10);
int dataRandom = r.nextInt(10);
energyRepository.save(
Energy.builder().id((long) i).name(deviceList.get(random)).price(i+random).date(dateList.get(dataRandom)).water(random * 2).build()
);
}
}
@Override
public List<Energy> queryEnergyListByDate() {
List<Energy> dataBase = energyRepository.queryEnergyListByDate();
Map<String, List<Energy>> collect = dataBase.stream().collect(Collectors.groupingBy(energy -> energy.getDate()));
Map<String, Energy> energyMap = new HashMap<>();
dataBase.stream().collect(Collectors.groupingBy(energy -> energy.getDate())).forEach((k,v)-> {
v.stream().forEach(groupByEnergy -> {
if (energyMap.get(k) == null) {
energyMap.put(k,
Energy.builder()
.id(groupByEnergy.getId())
.date(groupByEnergy.getDate())
.price(groupByEnergy.getPrice())
.name(groupByEnergy.getName())
.water(groupByEnergy.getWater())
.build());
}else {
energyMap.get(k).setPrice(groupByEnergy.getPrice()+energyMap.get(k).getPrice());
energyMap.get(k).setWater(groupByEnergy.getWater()+energyMap.get(k).getWater());
}
} );
});
collect.size();
return null;
}
}