java代码优化

2019-12-12  本文已影响0人  灿烂的GL

1、lombok的@Builder模式

适用场景:构建对象有两种方法,一是构造器,二是默认无参构造器创建对象后使用 set 方法一个个赋值。如果变量很多,或者说构建对象时需要传入的参数很多,我们就需要用到 builder 构建对象,这里通过lombok插件的注解实现。
实例
1)pom依赖

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>0.10.2</version>
   </dependency>

2)构建实体

@Data
@Builder
public class AuthRiskRes {
    private List<String> date;
    private List<Integer> risk;
    private Integer totalRisk;
}

3)调用

AuthRiskRes.builder().date(dates).totalRisk(0).risk(Collections.EMPTY_LIST).build();

4)输出格式参考

"date": [‘9月1日’,’9月2日’,’9月3日’,’9月4日’,’9月5日’,’9月6日’,’9月7日’],
                "risk": [1,2,3,4,5,6,7]
,”totalRisk”:28

2、Java 8 stream方法

1)适用场景:Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,和迭代器又不同的是,Stream 可以并行化操作,这是JDK8后有的特性,可以通过参考1简单了解其特性。
对于流的详细原理和更全的应用可参考2
参考链接:
1、jdk8的特性stream().map()
2、JDK1.8-Stream()使用详解


3、Java 8 Optional 类

适用场景:需要判空情况(避免出现空指针情况),简化代码
1)实例参考链接2

一段冗余代码:
public static String getChampionName(Competition comp) throws IllegalArgumentException {
    if (comp != null) {
        CompResult result = comp.getResult();
        if (result != null) {
            User champion = result.getChampion();
            if (champion != null) {
                return champion.getName();
            }
        }
    }
    throw new IllegalArgumentException("The value of param comp isn't available.");
}

Optional加持过后
public static String getChampionName(Competition comp) throws IllegalArgumentException {
    return Optional.ofNullable(comp)
            .map(c->c.getResult())
            .map(r->r.getChampion())
            .map(u->u.getName())
            .orElseThrow(()->new IllegalArgumentException("The value of param comp isn't available."));
}

参考链接
1、理解、学习与使用 JAVA 中的 OPTIONAL
2、Optional 作用与实例


4、工厂模式

适用场景:采用工厂模式主要的原因是为了解耦合,相当于把用户(不同需求)和工厂(公共方法)分割开。
1)实例

//抽象产品角色---工厂
public interface Product{
  void product();
}
//具体需求1
public class Pro1 implements Product{
  @Override
  public void product() {
    System.out.println("需求1");
  }
}
//具体需求2
public class Pro2 implements Product{
  @Override
  public void product() {
    System.out.println("需求2");
  }
}

调用

public class Factory { 
    public static Product buy(type) { 
      switch (type) { 
      case 1: 
        return new Pro1(); 
      case 2: 
        return new Pro2(); 
      default: 
        break; 
      } 
      return null; 
    } 
  } 

其他工厂模式实现思想类似

上一篇下一篇

猜你喜欢

热点阅读