日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

利用Map結合Supplier消除switch...case

作者:文盲青年 更新時間: 2023-09-12 編程語言

當我們遇到switch…case過多的場景時,往往代碼可讀性不好,例如:

public class Main {

    public static void main(String[] args) {
        int score = 60;
        String level = getLevel(score);
        System.out.println("level is: " + level);
    }

    private static String getLevel(int score) {
        String level;
        switch (score) {
            case 10:
                level = "A";
                break;
            case 20:
                level = "B";
                break;
            case 30:
                level = "C";
                break;
            case 40:
                level = "D";
                break;
            case 50:
                level = "E";
                break;
            case 60:
                level = "F";
                break;
            default:
                level = "UN_KNOWN";
        }
        return level;
    }
}

這里只是簡單的level=xxx的處理邏輯,如果每一個case里面都有一大坨邏輯,那么switch整段代碼看起來就會十分的臃腫。我們可以用Map結合Supplier來做優化:(對Supplier不熟悉的可以參考Java8之Consumer、Supplier、Predicate和Function攻略)

public class Main {

    public static void main(String[] args) {
        int score = 60;
        String level = getLevel(score);
        System.out.println("level is: " + level);
    }

    private static String getLevel(int score) {
        Map<Integer, Supplier<String>> map = new HashMap<>(6);
        map.put(10, getLevelA());
        map.put(20, getLevelB());
        map.put(30, getLevelC());
        map.put(40, getLevelD());
        map.put(50, getLevelE());
        map.put(60, getLevelF());
        Supplier<String> supplier = map.get(score);
        if (supplier == null) {
            return "UN_KNOWN";
        }
        //調用get方法時,才會執行 getLevelX 里面的代碼邏輯
        return supplier.get();
    }


    private static Supplier<String> getLevelA() {
        return () -> "A";
    }

    private static Supplier<String> getLevelB() {
        return () -> "B";
    }

    private static Supplier<String> getLevelC() {

        return () -> "C";

    }

    private static Supplier<String> getLevelD() {
        return () -> "D";

    }

    private static Supplier<String> getLevelE() {
        return () -> "E";
    }

    private static Supplier<String> getLevelF() {
        return () -> "F";
    }
}

原文鏈接:https://rabbit.blog.csdn.net/article/details/129206109

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新