消除if-else
消除单个IF-else
- 定义函数式接口
创建一个名为IfElseFunction的函数式接口,接口的参数为两个Runnable接口。这两个两个Runnable接口分别代表了为true或false时要进行的操作。
- 编写判断方法
在里面设置了一个静态方法 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();
}
};
}
}
- 使用方式
@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("找不到用户");
});
}