函数式编程实现优雅逻辑代码
Posted yuanpenc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式编程实现优雅逻辑代码相关的知识,希望对你有一定的参考价值。
通常java中函数的入参,出参数都是结构数据。但是函数式接口可以实现传递函数表达式。函数式接口+lambda表达式就可以实现这个功能。
如果想把一段执行逻辑储存下来然后在不同的地方调用:
// 写法一
@FunctionalInterface
public interface LambdaInterface {
public abstract String stringBilder();
}
LambdaInterface lambdaInterface = () -> "a"+"b”;
// 写法二
public class MySupplier implements Supplier{
@Override
public Object get() {
return null;
}
}
如果只是想提取出公共执行逻辑,可以利用函数式编程优雅实现。
举个例子,在并发编程的时候,往往都会加锁和释放锁。
//
Lock
try{
Some logic code
}catch(Exception e) {
log
}finally {
Unlock
}
这样的写法,出现一次还行,但是设计过程中可能存在多个相似实现类,每次都要加锁、处理逻辑、释放锁。非常麻烦,也不优雅。因此可以把“锁”过程提取出来。这就要用到函数式编程了。
public void test3() {
System.out.println(SupplieraLockUtil.exec(() -> {
System.out.println("run lambda 1");
return "get result1";
}));
System.out.println(SupplieraLockUtil.exec(() -> {
System.out.println("run lambda 1");
return "get result2";
}));
// 将lock和unlock封装在util类中,然后用函数式接口执行lambda表达式
public class SupplieraLockUtil {
public static <T> T exec(Supplier<T> supplier) {
try{
lock();
System.out.println("do some logic");
return supplier.get();
}catch (Exception e) {
System.out.println("error");
throw new RuntimeException();
}finally {
unLock();
}
}
public static void lock(){
System.out.println("lock");
};
public static void unLock(){
System.out.println("unlock");
};
}
就这样,非常简单就可以实现封装重复代码并传递函数逻辑,极大简化了代码。
以上是关于函数式编程实现优雅逻辑代码的主要内容,如果未能解决你的问题,请参考以下文章