本文記錄一下我最近一段時間遇到過的一些代碼優化或者代碼規範寫法,想起來就不斷更新和記錄。
因一些代碼是公司代碼,爲了合理放出來,有一些命名或者格式是自我更改,減少公司代碼出現在互聯網,可能出現一些命令規範不太好的,比如沒有按駝峯命名方式等一些基礎錯誤,有時間逐一更改。
1.使用java8後,優化一些代碼寫法
例1:關於list裏刪除元素,根據阿里規範手冊要求,基本使用迭代來處理
Iterator<SpVo> it = list.iterator();
while (it.hasNext()) {
SpVo spVo = it.next();
if (ObjectUtil.isEmpty(spVo.getBh())) {
it.remove();
}
}
使用java8語法後:
spList.removeIf(spVo -> ObjectUtil.isEmpty(spVo.getBh()));
例2:排序簡化
Set<Jf> set = new TreeSet<>(new Comparator<Jf>() {
@Override
public int compare(Jf o1, Jf o2) {
//字符串,則按照asic碼升序排列
return o1.getBh().compareTo(o2.getBh());
}
});
使用java8語法後:
改爲升序:Set<Jf> set = new TreeSet<>(Comparator.comparing(Jf::getBh));
改爲降序:Set<Jf> set = new TreeSet<>((o1, o2) -> o2.getBh().compareTo(o1.getBh()));
例3:減少多餘的判斷,尤其適用java8新語法帶來的
for (MetaVO entity : list) {
List<MetaVO> entities = nestedMaps.get(entity.getPid());
if (entities == null) {
entities = new ArrayList<>();
}
entities.add(entity);
nestedMaps.put(entity.getPid(), entities);
}
使用java8語法後:
for (MetaVO entity : list) {
List<MetaVO> entities = nestedMaps.computeIfAbsent(entity.getPid(),k->new ArrayList<>());
entities.add(entity);
}
2.一些好習慣
2.1 參數過多的話,每個公司要求不同,個人覺得超過三個以上,就可以用bean來封裝
2.2 在一個方法裏,返回值如果沒有過多的處理,可以直接返回,而不需要再建立什麼容器(這裏容器主要指的例如集合、對象等內容)來返回,在ServiceImpl層常見
public String getId(String name){
String str = userMapper.getId(name);
return str;
}
應該寫爲
public String getId(String name){
return userMapper.getId(name);
}
2.3 對布爾判斷,如果簡單的話,儘可能使用三目運算,看起來簡單也寫起來方便。
2.4 對集合裏的某個值需要每次拿出來判斷,還不如直接去定義一個變量獲取好,然後拿這個變量去判斷,減少內存消耗。
2.5 map進行遍歷,使用keySet進行遍歷獲取keys,使用entrySet,遍歷一次將key和value放置在entry中,沒必要keySet進行遍歷獲取keys,然後通過map.get(key)獲取value。相當於進行遍歷了兩次
3.其他內容
例1:減少if-else,這個網上很多優化,可以自行百度,我個人常用就是枚舉類或者因環境而優化
for (PzVO pVO:pzVOList) {
if(A.equals(pzVO.getKey())){
sDo.setA(pzVO.getValue());
}
if(B.equals(pzVO.getKey())){
sDo.setB(pzVO.getValue());
}
if(C.equals(pzVO.getKey())){
sDo.setC(pzVO.getValue());
}
if(D.equals(pzVO.getKey())) {
sDo.setD(pzVO.getValue());
}
}
優化1:用if-else,這樣減少沒必要的判斷,每次if都要去判斷一次
優化2:
Map<String,String> pzMap = pzVOList.stream().collect(
Collectors.toMap(PzVO::getKey,PzVO::getValue));
sDo.setA(pzMap.get(A));
sDo.setB(pzMap.get(B));
sDo.setC(pzMap.get(C));
sDo.setD(pzMap.get(D));
例2:沒必要每次去創建
List<SyVo> list = new ArrayList<>();
if (){
list = ...
}else{
list = ...
}
改進:
List<SyVo> list ;
if (){
list = ...
}else{
list = ...
}
例3:一些多餘的寫法
private String setIdea(String note) {
if (StringUtils.isEmpty(note)) {
return "";
}
if (Common.YES.getCode().equals(note)) {
return "通過";
} else if (Common.NO.getCode().equals(note)) {
return "駁回";
}
return "";
}
改進:
private String setIdea(String note) {
String flag = "";
if (Common.YES.getCode().equals(note)) {
flag = "通過";
} else if (Common.NO.getCode().equals(note)) {
flag = "駁回";
}
return flag;
}