目录
一、概述
本章节通过几个简单的demo示例代码,来演示下通过函数式接口消除代码中的if else 语句
二、当不满足判断条件时抛出异常的if
2.1. 声明抛出异常的接口
package com.example;
public interface ThrowExceptionFunction {
/**
* 抛出异常信息
* @param message 异常信息
*/
void throwMessage(String message);
}
2.2. 定义工具类中的方法
package com.example;
import java.util.function.Predicate;
public class VUtils {
/**
* 如果参数为true抛出异常信息
* @param predicate
* @param value
* @return
*/
public static ThrowExceptionFunction isTrue(Predicate<String> predicate, String value) {
return (errorMessage) -> {
if (predicate.test(value)) {
throw new RuntimeException(errorMessage);
}
};
}
}
2.3. 测试
package com.example;
public class Test {
public static void main(String[] args) {
// 处理抛出异常的if
VUtils.isTrue(v -> v.length() > 5, "王哲晓").throwMessage("hahaha");
}
}
三、处理if分支操作
3.1. 声明分支操作的接口
package com.example;
public interface BranchHandle {
/**
* 分支操作
* @param trueHandle 为true时要进行的操作
* @param falseHandle 为false时要进行的操作
* return void
*/
void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);
}
3.2. 定义工具类中的方法
package com.example;
import java.util.function.Predicate;
public class VUtils {
/**
* 分支操作
* @param b 为true时要进行的操作, 为false时要进行的操作
* return void
*/
public static BranchHandle isTrueOrElse(Boolean b) {
return ((trueHandle, falseHandle) -> {
if (b) {
trueHandle.run();
} else {
falseHandle.run();
}
});
}
}
3.3. 测试
package com.example;
public class Test {
public static void main(String[] args) {
// 处理if分支操作
VUtils.isTrueOrElse(false).trueOrFalseHandle(
() -> {
System.out.println("我叫王哲晓, 我热爱编程!");
},
() -> {
System.out.println("我叫王哲晓,我热爱学习!");
}
);
}
}
四、如果存在值执行消费操作否则执行基于空的操作
4.1. 声明抛出异常的接口
package com.example;
import java.util.function.Consumer;
public interface PresentOrElseHandler<T extends Object> {
/**
* 值不为空时执行消费操作
* 值为空时执行其他的操作
* @param action 值不为空时,执行的消费操作
* @param emptyAction 值为空时,执行的操作
*/
void presentOrElseHandle(Consumer<? super T> action, Runnable emptyAction);
}
4.2. 定义工具类中的方法
package com.example;
import java.util.function.Predicate;
public class VUtils {
/**
* 参数为true或false时,分别进行不同的操作
* @param str
* @return
*/
public static PresentOrElseHandler<?> isBlankOrNoBlank(String str) {
return (consumer, runnable) -> {
if (str == null || str.length() == 0) {
runnable.run();
} else {
consumer.accept(str);
}
};
}
}
4.3. 测试
package com.example;
public class Test {
public static void main(String[] args) {
// 如果存在值执行消费操作,否则执行基于空的操作
VUtils.isBlankOrNoBlank("hello")
.presentOrElseHandle(System.out::println,
() -> System.out.println("空字符串"));
}
}
总结:以上仅通过几个简单的示例来演示函数式接口优化if else的运用技巧,实际开发中可以根据自身的业务需求,进行灵活的变动修改来运用。