62,614
社区成员
发帖
与我相关
我的任务
分享
for(Map map : pointmaps){ //遍历pointmaps
String pdate= pointmaps.get("pdate"); //获取map中的日期
for(Entry entry:map.Entry()){ //遍历map
int powerInUnit=0; int powerInPLant=0;
for(UnitPower unitPower: List<unitPower>){
if( unitPower.getPdate().equals(pdate)&&unitPower.getperiodID().equals(entry.getkey())){ //匹配日期和时刻点
powerInUnit=unitPower.getPower(); //获取此时刻power
break;
}
}
for(PlantPower plantPower: List<PlantPower>){
if( plantPower.getPdate().equals(pdate)&&plantPower.getperiodID().equals(entry.getkey())){ //匹配日期和时刻点
powerInPlant=plantPower.getPower(); //获取此时刻power
break;
}
}
//保存此日期,此时刻点的power。power=powerInUnit+powerInPLant
doSave();
}
}
for(UnitPower unitPower: List<unitPower>){
if( unitPower.getPdate().equals(pdate)&&unitPower.getperiodID().equals(entry.getkey())){ //匹配日期和时刻点
powerInUnit=unitPower.getPower(); //获取此时刻power
break;
}
}
for(PlantPower plantPower: List<PlantPower>){
if( plantPower.getPdate().equals(pdate)&&plantPower.getperiodID().equals(entry.getkey())){ //匹配日期和时刻点
powerInPlant=plantPower.getPower(); //获取此时刻power
break;
}
}
public static void main(String[] args) {
ArrayList<HashMap<String, String>> pointmaps = new ArrayList<>();
ArrayList<UnitPower> unitPowers = new ArrayList<>();
ArrayList<PlantPower> plantPowers = new ArrayList<>();
//对List<UnitPower>使用日期和时间点分组,分组后得到的unitPowersMaps为<日期,<时间点,List<UnitPower>>>
// 只要日期与时间点不重复,正常情况下最里层的List<UnitPower>应该只有一个元素
Map<String, Map<String, List<UnitPower>>> unitPowersMaps = unitPowers.stream()
.collect(Collectors.groupingBy(UnitPower::getPdate
, Collectors.groupingBy(UnitPower::getPeriodID)));
///对List<PlantPower>使用日期和时间点分组,plantPowersMaps为<日期,<时间点,List<PlantPower>>>
Map<String, Map<String, List<PlantPower>>> plantPowersMaps = plantPowers.stream()
.collect(Collectors.groupingBy(PlantPower::getPdate
, Collectors.groupingBy(PlantPower::getPeriodID)));
pointmaps.stream().parallel().forEach(map -> {
String date = map.get("pdate");
//获取date日期的unitPowers
Map<String, List<UnitPower>> periodIdAndUnitPowerMap = unitPowersMaps.get(date);
//获取date日期的plantPowers
Map<String, List<PlantPower>> periodIdAndPlantPowerMap = plantPowersMaps.get(date);
for (Map.Entry<String, String> entry : map.entrySet()) {
//时间点
String periodId = entry.getValue();
int powerInUnit = 0;
int powerInPlant = 0;
if (StringUtils.equals("pdate", entry.getKey())) {
//如果为key为日期,跳过
continue;
}
if (Objects.nonNull(periodIdAndUnitPowerMap)) {
List<UnitPower> unitPowerList = periodIdAndUnitPowerMap.get(periodId);
//按照分组时候的逻辑,如果日期与时间点不重复,List<UnitPower>只有一个元素,
// 也有可能时间点不存在,也就没有元素
if (unitPowerList.size() > 0) {
UnitPower unitPower = unitPowerList.get(0);
powerInUnit = unitPower.getPower();
}
}
if (Objects.nonNull(periodIdAndPlantPowerMap)) {
List<PlantPower> plantPowerList = periodIdAndPlantPowerMap.get(periodId);
//按照分组时候的逻辑,如果日期与时间点不重复,List<UnitPower>只有一个元素,
// 也有可能时间点不存在,也就没有元素
if (plantPowerList.size() > 0) {
PlantPower plantPower = plantPowerList.get(0);
powerInPlant = plantPower.getPower();
}
}
//保存此日期,此时刻点的power。power=powerInUnit+powerInPlant
//如果使用了mybatis或者mybatis-plus,此时可以不保存到数据库中,保存到list中,
// 最后使用批量保存提高插入效率,如果使用的Spring data jpa 批量保存仅仅是简单的for循环,还不如在这保存
doSave();
}
});
}