学无先后,达者为师

网站首页 编程语言 正文

利用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

  • 上一篇:没有了
  • 下一篇:没有了
栏目分类
最近更新