springboot 使用函数式编程(流式编程)替代if/else方法及代码简洁性案例

替代if/else 方案

以异常为例子,自定义一个异常接口类:

package lambda.iforelse;

@FunctionalInterface
public interface ThrowExceptionFunction {

    /**
     * 抛出异常信息
     * @param message 异常信息
     */
    void throwMessage(String message);
}

然后定义一个工具类(不一定是工具类,可以是任何类)

package lambda.iforelse;

public class ExceptionUtil {

    /**
     * 参数为true时,抛出异常
     * @param b true 时抛出异常
     * @return ThrowExceptionFunction
     */
    public static ThrowExceptionFunction throwTuBus(boolean b){
        return message -> {
          if(b){
              throw new RuntimeException(message + "throwTuBus");
          }
        };
    }

    /**
     * 参数为true时,抛出异常
     * @param b true 时抛出异常
     * @return ThrowExceptionFunction
     */
    public static ThrowExceptionFunction throwToData(boolean b){
        return message -> {
            if(b){
                throw new RuntimeException(message + "throwToData");
            }
        };
    }

    public static void main(String[] args) {
        //参数为true ,抛出异常
        //throwTuBus(true).throwMessage("123");
        throwToData(true).throwMessage("456");
    }


}


执行结果:
Exception in thread "main" java.lang.RuntimeException: 456throwToData
	at lambda.iforelse.ExceptionUtil.lambda$throwToData$1(ExceptionUtil.java:26)
	at lambda.iforelse.ExceptionUtil.main(ExceptionUtil.java:34)

Process finished with exit code 1

从这个工具类可以看到,我们将if(true) 改为在方法内部去判断,减少了调用处的if / else ;代码也变得非常简洁,就一句话,若throwToData 传参是true 则执行后面的异常抛出。

流式编程例子(过滤传入集合中的元素并打印):

package lambda.iforelse.example;

import java.util.List;

/**
 * 输出数组元素4 和 5
 * @author wxy
 */
@FunctionalInterface
public interface SystemOutArray {

    /**
     * 输出数组元素4 和 5
     * @param list 数字集合
     */
    void printArray4And5(List list);
}
package lambda.iforelse.example;

import java.util.Arrays;
import java.util.List;

/**
 * 输出数组工具类
 * @author wxy
 */
public class SystemOutUtil {

    /**
     * 过滤传入数组中元素并打印
     * @param filter 入参,需要过滤的元素
     * @return SystemOutArray
     */
    public static SystemOutArray print4And5(List filter){
        return list -> {
            list.forEach(i -> {
                if(filter.contains(i)){
                    System.out.println(i);
                }
            });

        };
    }

    public static void main(String[] args) {
        Integer[] intArr = new Integer[]{4,5};
        Integer[] para = new Integer[]{1,2,3,4,5};
        print4And5(Arrays.asList(intArr)).printArray4And5(Arrays.asList(para));
    }
}

输出结果:
4
5

Process finished with exit code 0

例子主要是输出过滤的4,5(接收一个集合)并输出;

可以看到这种写法是非常简洁的,我个人是喜欢这种写法;

你可能感兴趣的:(JAVA,java,开发语言)