首页 > 其他分享 >Function 函数式接口 处理if else过多的问题

Function 函数式接口 处理if else过多的问题

时间:2023-11-13 18:12:18浏览次数:26  
标签:Function Runnable return void param else 接口 操作

使用注解@FunctionalInterface标识,并且只包含一个抽象方法的接口是函数式接口

函数式接口主要分为Supplier供给型函数、Consumer消费型函数、Runnable无参无返回型函数和Function有参有返回型函数

 

处理if分支操作

1、定义函数

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

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

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

 

处理if分支操作

1、定义函数式接口

创建一个名为BranchHandle的函数式接口,接口的参数为两个Runnable接口。这两个两个Runnable接口分别代表了为truefalse时要进行的操作

/**
 * 分支处理接口
 **/
@FunctionalInterface
public interface BranchHandle {

    /**
     * 分支操作
     *
     * @param trueHandle 为true时要进行的操作
     * @param falseHandle 为false时要进行的操作
     * @return void
     **/
    void trueOrFalseHandle(Runnable trueHandle, Runnable 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);
   
}


测试代码
package utils;

/**
 * @description:
 * @author: luguilin
 * @date: 2023-11-13 16:43
 **/
public class VUtils {

    /**
     *  如果参数为true抛出异常
     *
     * @param b
     * @return com.example.demo.func.ThrowExceptionFunction
     **/
    public static ThrowExceptionFunction isTure(boolean b){

        return (errorMessage) -> {
            if (b){
                throw new RuntimeException(errorMessage);
            }
        };
    }

    /**
     * 参数为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();
            }
        };
    }

    /**
     * 参数为true或false时,分别进行不同的操作
     *
     * @param str
     * @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);
            }
        };
    }

    public static void main(String[] args) {

        isTure(false).throwMessage("Hello world");

        isTureOrFalse(false).trueOrFalseHandle(() -> System.out.println("true"), () -> System.out.println("false"));

        isBlankOrNoBlank("Hello world").presentOrElseHandle((s) -> System.out.println(s), () -> System.out.println("null"));
    }
}

 

 

标签:Function,Runnable,return,void,param,else,接口,操作
From: https://www.cnblogs.com/r1-12king/p/17829777.html

相关文章

  • 解决Azure function部署问题
    最近在AzureChina遇到了一个问题,大概现象是这样,我们用的runtime是python的,创建好function之后,在尝试往function上部署代码时遇到一些奇怪的现象,试了各种方法将代码部署到function上,都会遇到一些问题1.vscodeextension-报错Encounteredanerror7:15:31AMaz-mim-xxxxxx:Synci......
  • IMC平台API接口如何对接C#数据库
    C#能抓取设备OID节点实现读取设备功能展示,如何对接IMC现有API接口 写入C#更直接调用IMC现有数据(设备种类数量,告警信息,CU利用率,无线运维大屏等) 答:如果是要开发IMC,需要购买IMC开发,如果是要调用IMC接口,可以联系400或者当地办事处对接下参考下api接口文档:https://zhiliao.h3c.co......
  • cas5.3 通过接口登录,登录后可跳到任意子系统,
    Map<String,Object>map=(Map)newMyBeanMap(systemUser);PrincipalFactoryprincipalFactory=newDefaultPrincipalFactory();Principalprincipal=principalFactory.createPrincipal(systemUser.getLoginid(),map);Authenticatio......
  • 探索循环语句:for、while循环和else的搭配使用
    循环语句是编程中的重要组成部分,它们使程序能够按照特定的模式执行重复任务。在Python中,我们主要有两种类型的循环:for循环和while循环。这两种循环语句都有其各自的特点和用途,而在这篇文章中,我们将深入探讨它们以及它们如何与else语句搭配使用。For循环for循环主要用于遍历序列(如列......
  • 个微协议开发/微信个人号二次开发/ipad协议/api接口
    E云管家,是完整的第三方服务平台,并基于IPAD协议8.0.37开发出的最新个微API服务框架。你可以通过API实现个性化微信功能(例云发单助手、社群小助手、客服系统、机器人等),用来自动管理微信消息。用户仅可一次对接,完善所有功能。可实现分布式部署,批量管理服务器。如果您不想自己部......
  • springboot使用requestmapping创建xml响应体接口
    entity下创建类文件,类名分别为:ResponseXml,ResponseItemcontroller下创建xml响应体实现方法getResponseWithXml---------ResponseXmlStart-------importjavax.xml.bind.annotation.*;//根标签@XmlRootElement(name="test1")publicclassResponseXml{privateStringum......
  • 接口开放太麻烦?试试阿里云API网关吧
    前言我在多方合作时,系统间的交互是怎么做的?这篇文章中写过一些多方合作时接口的调用规则和例子,然而,接口开放所涉及的安全、权限、监控、流量控制等问题,可不是简简单单就可以解决的,这一般需要专业的开放平台来支撑。但为了开放几个接口就要做一个开放平台,实在是不合算。为此阿里云为......
  • java项目实战-mybatis-基本用法02接口绑定实现类-day23
    目录1.复习什么是接口什么是类?2.mybatis接口绑定实现类来实现查询3.参数的传递4插入数据1.复习什么是接口什么是类?publicinterfaceSpeak{voidsay();}Speak这个接口里面定义了say方法所有实现了Speak的类都必须实现say方法publicclassChineseimpl......
  • C++零基础教程(抽象类和接口)
    (文章目录)前言本篇文章来讲解抽象类和接口的概念,抽象类和接口都需要依靠我们之前讲解的虚函数来实现,那么我们就来看看如何使用虚函数来实现抽象类和接口吧。一、抽象类概念抽象类是一种不能直接实例化(即创建对象)的类,它被用作其他类的基类或接口。抽象类通过声明纯虚函数(没有......
  • 【Python编程】深入理解条件语句:if、else、elif详解
    在Python编程中,条件语句是一种非常重要的控制结构,可以用于根据特定条件执行不同的代码块。本文将深入探讨if、else和elif条件语句的用法,并通过详细的代码案例来帮助您更好地理解它们。一、if语句if语句用于根据特定条件执行代码块。如果条件为真,则执行if语句下面的代码块;如果条件为......