自我总结的一些java编码习惯(不断更新)

本文记录一下我最近一段时间遇到过的一些代码优化或者代码规范写法,想起来就不断更新和记录。

因一些代码是公司代码,为了合理放出来,有一些命名或者格式是自我更改,减少公司代码出现在互联网,可能出现一些命令规范不太好的,比如没有按驼峰命名方式等一些基础错误,有时间逐一更改。

 

1.使用java8后,优化一些代码写法

 例1:关于list里删除元素,根据阿里规范手册要求,基本使用迭代来处理

    Iterator 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 set = new TreeSet<>(new Comparator() {
               @Override
               public int compare(Jf o1, Jf o2) {
                   //字符串,则按照asic码升序排列
                   return o1.getBh().compareTo(o2.getBh());
               }
          });

       使用java8语法后:

         改为升序:Set set = new TreeSet<>(Comparator.comparing(Jf::getBh));
         改为降序:Set set = new TreeSet<>((o1, o2) -> o2.getBh().compareTo(o1.getBh()));

例3:减少多余的判断,尤其适用java8新语法带来的

         for (MetaVO entity : list) {            
            List 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 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 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 list = new ArrayList<>();
          if (){
              list = ...
          }else{
              list = ...
          }

     改进:
          List 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;
        }

你可能感兴趣的:(JAVA学习)