可读性很高。这是方法抽取的秘诀。写文章应该也可以这样,把一些抽象的东西装进黑盒,尽可能为大众留下更通俗易懂的文字。
选中代码-右键重构-提取方法-起名
Map是可以这样做的,List不行。List如果在for循环的时候 删除里面的元素,会导致ConcurrentModificationException
异常。
for (String key: map.keySet()) {
? ? ? ? ? ? Car car = null;
? ? ? ? ? ? if (map.containsKey(key)) {
? ? ? ? ? ? ? ? car = map.get(key);
? ? ? ? ? ? ? ? map.remove(key);
? ? ? ? ? ? }
}
?ele.getBatchId() + "_" + ele.getDate()?
那应该怎么取batchId呢?
?ele.split("_")[0]
List<String> dateCollect = reportList.stream().map(ReportStatistic::getDate).collect(Collectors.toList());
Set<String> dateSet = new HashSet<>(dateCollect);
如果有 就xx 然后直接 return 。
我之前总忘记还有return。
Map<String, Car> oldDataMap = oldDatalist.stream().collect(Collectors.toMap(e -> e.getDate() + "-" + e.getxx() + "-" + e.getxx() , Function.identity(), (k, v) -> k));
Map<String, Car> newDataMap = newDataList.stream().collect(Collectors.toMap(e -> e.getDate() + "-" + e.getxx() + "-" + e.getxx() , Function.identity(), (k, v) -> k));
for (String key : newDataMap.keySet()) {
//如果旧数据里有新数据的key,那么就给该新数据设置旧数据的id
if(oldDataMap.containsKey(key)){
newDataMap.get(key).setId(oldDataMap.get(key).getId());
}
}
//再用JPA的SaveAll(如果id为null就新增,如果id不为null就修改,也就是增量新增)
repository.saveAll(newDataMap.values);