1 JSONObject 实际上是个map
2 数据库实际上也是map 只不过map 是竖着写,数据库横着写.
3 像 用户名 密码 这种后续可能随时会改的,不要写死在代码里,都写成nacos参数。
4 方法的抽取 让代码变得简洁
可读性很高。这是方法抽取的秘诀。写文章应该也可以这样,把一些抽象的东西装进黑盒,尽可能为大众留下更通俗易懂的文字。
选中代码-右键重构-提取方法-起名
5 for循环map的key,然后去另一个map匹配,如果有就取出来做后续处理,同时把它从Map里给删掉。(防止重复)
Map是可以这样做的,List不行。List如果在for循环的时候 删除里面的元素,会导致ConcurrentModificationException
异常。
for (String key: map.keySet()) {
Car car = null;
if (map.containsKey(key)) {
car = map.get(key);
map.remove(key);
}
}
6 如果list转map 的时候,key这样设置
ele.getBatchId() + "_" + ele.getDate()
那应该怎么取batchId呢?
ele.split("_")[0]
7 按下面这样操作,就可以拿到去重后的已有日期数据。
List<String> dateCollect = reportList.stream().map(ReportStatistic::getDate).collect(Collectors.toList());
Set<String> dateSet = new HashSet<>(dateCollect);
8 擅用return。
如果有 就xx 然后直接 return 。
我之前总忘记还有return。
9 命名规范。如果是布尔值,命名最后前可以加个is。比如是否同步历史数据,可以写isSyncHistory,如果是true就是同步,如果是false,就是不同步。
如果写syncHistory,那么就容易造成混乱。
10 增量保存的奥秘。
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);