关于java:妙用-Java-8-中的-Function-接口消灭-ifelse非常新颖的写法

1次阅读

共计 2814 个字符,预计需要花费 8 分钟才能阅读完成。

起源:juejin.cn/post/7011435192803917831

在开发过程中常常会应用 if...else... 进行判断抛出异样、分支解决等操作。这些 if...else... 充斥在代码中重大影响了代码代码的好看,这时咱们能够利用 Java 8 的 Function 接口来毁灭if...else...

if (...){throw new RuntimeException("出现异常了");}

if (...){doSomething();
} else {doOther();
}

Function 函数式接口

应用注解 @FunctionalInterface 标识,并且只蕴含一个形象办法的接口是函数式接口。函数式接口次要分为 Supplier 供应型函数、Consumer 消费型函数、Runnable 无参无返回型函数和 Function 有参有返回型函数。

Function 能够看作转换型函数

Supplier 供应型函数

Supplier 的表现形式为不承受参数、只返回数据

Consumer 消费型函数

Consumer 消费型函数和 Supplier 刚好相同。Consumer 接管一个参数,没有返回值

Runnable 无参无返回型函数

Runnable 的表现形式为即没有参数也没有返回值

Function 函数的表现形式为接管一个参数,并返回一个值。SupplierConsumerRunnable 能够看作 Function 的一种非凡表现形式

应用小技巧

解决抛出异样的 if

1. 定义函数

定义一个抛出异样的模式的函数式接口, 这个接口只有参数没有返回值是个消费型接口

/**
 * 抛异样接口
 **/
@FunctionalInterface
public interface ThrowExceptionFunction {

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

2. 编写判断办法

创立工具类 VUtils 并创立一个 isTure 办法,办法的返回值为方才定义的函数式接口 -ThrowExceptionFunctionThrowExceptionFunction的接口实现逻辑为当参数 b 为 true 时抛出异样

/**
 *  如果参数为 true 抛出异样
 *
 * @param b
 * @return com.example.demo.func.ThrowExceptionFunction
 **/
public static ThrowExceptionFunction isTure(boolean b){return (errorMessage) -> {if (b){throw new RuntimeException(errorMessage);
        }
    };
}

3. 应用形式

调用工具类参数参数后,调用函数式接口的 throwMessage 办法传入异样信息。当出入的参数为 false 时失常执行

当出入的参数为 true 时抛出异样

解决 if 分支操作

1. 定义函数式接口

创立一个名为 BranchHandle 的函数式接口,接口的参数为两个 Runnable 接口。这两个两个 Runnable 接口别离代表了为 true 或 false 时要进行的操作

/**
 * 分支解决接口
 **/
@FunctionalInterface
public interface BranchHandle {

    /**
     * 分支操作
     *
     * @param trueHandle 为 true 时要进行的操作
     * @param falseHandle 为 false 时要进行的操作
     * @return void
     **/
    void trueOrFalseHandle(Runnable trueHandle, Runnable falseHandle);

}

2. 编写判断办法

创立一个名为 isTureOrFalse 的办法,办法的返回值为方才定义的函数式接口 -BranchHandle

/**
 * 参数为 true 或 false 时,别离进行不同的操作
 *
 * @param b
 * @return com.example.demo.func.BranchHandle
 **/
public static BranchHandle isTureOrFalse(boolean b){return (trueHandle, falseHandle) -> {if (b){trueHandle.run();
        } else {falseHandle.run();
        }
    };
}

3. 应用形式

参数为 true 时,执行 trueHandle

参数为 false 时,执行 falseHandle

如果存在值执行生产操作,否则执行基于空的操作

1. 定义函数

创立一个名为 PresentOrElseHandler 的函数式接口,接口的参数一个为 Consumer 接口。一个为 Runnable, 别离代表值不为空时执行生产操作和值为空时执行的其余操作

/**
 * 空值与非空值分支解决
 */
public interface PresentOrElseHandler<T extends Object> {

    /**
     * 值不为空时执行生产操作
     * 值为空时执行其余的操作
     *
     * @param action 值不为空时,执行的生产操作
     * @param emptyAction 值为空时,执行的操作
     * @return void
     **/
   void presentOrElseHandle(Consumer<? super T> action, Runnable emptyAction);

}

2. 编写判断办法

创立一个名为 isBlankOrNoBlank 的办法,办法的返回值为方才定义的函数式接口 -PresentOrElseHandler

/**
 * 参数为 true 或 false 时,别离进行不同的操作
 *
 * @param b
 * @return com.example.demo.func.BranchHandle
 **/
public static PresentOrElseHandler<?> isBlankOrNoBlank(String str){return (consumer, runnable) -> {if (str == null || str.length() == 0){runnable.run();
        } else {consumer.accept(str);
        }
    };
}

3. 应用形式

调用工具类参数参数后,调用函数式接口的 presentOrElseHandle 办法传入一个 ConsumerRunnable

参数不为空时,打印参数

参数不为空时

结尾

Function 函数式接口是 java 8 十分重要的个性,利用好 Function 函数能够极大的简化代码。

你会在代码中试试这种办法吗?欢送留言说出你的认识!

近期热文举荐:

1.1,000+ 道 Java 面试题及答案整顿(2022 最新版)

2. 劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.20w 程序员红包封面,快快支付。。。

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

正文完
 0