消除if-else

消除单个IF-else

  1. 定义函数式接口

创建一个名为IfElseFunction的函数式接口,接口的参数为两个Runnable接口。这两个两个Runnable接口分别代表了为truefalse时要进行的操作。

  1. 编写判断方法

在里面设置了一个静态方法 isTrueOrFalse,接收 boolean 类型传参,并返回 IfElseFunction 函数接口。

@FunctionalInterface
public interface IfElseFunction {

    void trueOrFalseHandle(Runnable trueRun, Runnable falseRun);

    static IfElseFunction isTrueOrFalse(boolean bool) {

        return (tr, fr) -> {
            if (bool) {
                tr.run();
            } else {
                fr.run();
            }
        };
    }
}
  1. 使用方式

@Test
public void test4() {
    // 判断是否
    IfElseFunction.isTrueOrFalse(true).trueOrFalseHandle(() -> {
        System.out.println("我是对的");
    }, () -> {
        System.out.println("我是错的");
    });

    // 可以稍微转换一下,用来判断空值并做操作
    String name = null;
    IfElseFunction.isTrueOrFalse(name != null).trueOrFalseHandle(() -> {
        System.out.println("我的名字是:" + name);
    }, () -> {
        System.out.println("我不知道我的名字");
    });
}


消除多个if-else

还是用静态方法 IfElseFunction 接口,我们稍微改写一下使用方式即可。这里面可以看出使用了策略模式。

private static Map<String, Runnable> map;

@Before
public void before() {
    map = new HashMap<>();
    map.put("A", () -> {
        System.out.println("I’m A");
    });
    map.put("B", () -> {
        System.out.println("I’m B");
    });
    map.put("C", () -> {
        System.out.println("I’m C");
    });
    map.put("D", () -> {
        System.out.println("I’m D");
    });
}

@Test
public void test5() {
    String searchKey = "F";
    IfElseFunction.isTrueOrFalse(map.get(searchKey) != null).trueOrFalseHandle(map.get(searchKey), () -> {
        System.out.println("找不到用户");
    });
}