第七章 函数式接口消除if else

目录

一、概述

二、当不满足判断条件时抛出异常的if

2.1. 声明抛出异常的接口

2.2. 定义工具类中的方法 

 2.3. 测试

三、处理if分支操作 

3.1. 声明分支操作的接口

3.2. 定义工具类中的方法

 3.3. 测试

四、如果存在值执行消费操作否则执行基于空的操作 

4.1. 声明抛出异常的接口

4.2. 定义工具类中的方法 

4.3. 测试 


一、概述

本章节通过几个简单的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的运用技巧,实际开发中可以根据自身的业务需求,进行灵活的变动修改来运用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值