Java代码重构出现很复杂的if else嵌套,假设我们的业务需要支持所有国家的名字与简写的转换。

1、题目(代码重构)

在业务场景中,经常会出现很复杂的if else嵌套,假设我们的业务需要支持所有国家的名字与简写的转换,以目前的写法,会有上百个if else。

  • 请在目前代码的基础上,试着优化写法,使得此段代码更好维护。
  • 请以注释的形式写明重构优化的理由

2、代码片段

import java.util.HashMap;

/**
 * Created by Q on 2022/3/27.
 */
public class CountryNameConverter {
    // 请按你的实际需求修改参数
    public String convertCountryName(String fullName) {
        if ("china".equalsIgnoreCase(fullName)) {
            return "CN";
        } else if ("america".equalsIgnoreCase(fullName)) {
            return "US";
        } else if ("japan".equalsIgnoreCase(fullName)) {
            return "JP";
        } else if ("england".equalsIgnoreCase(fullName)) {
            return "UK";
        } else if ("france".equalsIgnoreCase(fullName)) {
            return "FR";
        } else if ("germany".equalsIgnoreCase(fullName)) {
            return "DE";
        } else {
            throw new RuntimeException("unknown country");
        }
    }
}

3、重构代码

import java.util.HashMap;

public class CountryNameConverter {
    // 请按你的实际需求修改参数
    public String convertCountryName(String fullName) {

        HashMap<String, String> Sites = new HashMap<String, String>();
        // 实际大量数据时可以考虑其他初始化代码块中遍历添加键值对
        Sites.put("china","CN");
        Sites.put("america","US");
        Sites.put("japan","JP");
        Sites.put("england", "UK");
        Sites.put("france", "FR");
        Sites.put("germany", "DE");

        return Sites.containsKey(fullName) ? Sites.get(fullName) : "unknown country"  ;

}
    public static void main(String[] args) {
        CountryNameConverter cnc = new CountryNameConverter();
        System.out.println(cnc.convertCountryName("china")); //CN
        System.out.println(cnc.convertCountryName("ch")); //unknown country
    }
}

4、扩展

HashMap判断键是否为 null 用containsKey(),而不用get():

HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。

当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。

因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。

其他方案

posted @ 2022-03-27 21:30  Code7Rain  阅读(107)  评论(0编辑  收藏  举报