0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

利用Java 8的Function接口來消滅if...else

Android編程精選 ? 來源:juejin.cn/post/ ? 作者:juejin.cn/post/ ? 2022-04-21 10:23 ? 次閱讀

在開發(fā)過程中經(jīng)常會使用if...else...進行判斷拋出異常、分支處理等操作。這些if...else...充斥在代碼中嚴重影響了代碼代碼的美觀,這時我們可以利用Java 8Function接口來消滅if...else...

if(...){
thrownewRuntimeException("出現(xiàn)異常了");
}

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

Function 函數(shù)式接口

使用注解@FunctionalInterface標識,并且只包含一個抽象方法的接口是函數(shù)式接口。函數(shù)式接口主要分為Supplier供給型函數(shù)、Consumer消費型函數(shù)、Runnable無參無返回型函數(shù)和Function有參有返回型函數(shù)。

Function可以看作轉換型函數(shù)

Supplier供給型函數(shù)

Supplier的表現(xiàn)形式為不接受參數(shù)、只返回數(shù)據(jù)

9f6cb94c-c09e-11ec-bce3-dac502259ad0.jpg

Consumer消費型函數(shù)

Consumer消費型函數(shù)和Supplier剛好相反。Consumer接收一個參數(shù),沒有返回值

9f7e14da-c09e-11ec-bce3-dac502259ad0.jpg

Runnable無參無返回型函數(shù)

Runnable的表現(xiàn)形式為即沒有參數(shù)也沒有返回值

9f8fdaa8-c09e-11ec-bce3-dac502259ad0.jpg

Function函數(shù)的表現(xiàn)形式為接收一個參數(shù),并返回一個值。Supplier、ConsumerRunnable可以看作Function的一種特殊表現(xiàn)形式

9fa29756-c09e-11ec-bce3-dac502259ad0.jpg

基于 Spring Boot + MyBatis Plus + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數(shù)據(jù)權限、工作流、三方登錄、支付、短信、商城等功能。

項目地址:https://github.com/YunaiV/ruoyi-vue-pro

使用小技巧

處理拋出異常的if

  1. 定義函數(shù)

定義一個拋出異常的形式的函數(shù)式接口, 這個接口只有參數(shù)沒有返回值是個消費型接口

/**
*拋異常接口
**/
@FunctionalInterface
publicinterfaceThrowExceptionFunction{

/**
*拋出異常信息
*
*@parammessage異常信息
*@returnvoid
**/
voidthrowMessage(Stringmessage);
}
  1. 編寫判斷方法

創(chuàng)建工具類VUtils并創(chuàng)建一個isTure方法,方法的返回值為剛才定義的函數(shù)式接口-ThrowExceptionFunction。ThrowExceptionFunction的接口實現(xiàn)邏輯為當參數(shù)btrue時拋出異常

/**
*如果參數(shù)為true拋出異常
*
*@paramb
*@returncom.example.demo.func.ThrowExceptionFunction
**/
publicstaticThrowExceptionFunctionisTure(booleanb){

return(errorMessage)->{
if(b){
thrownewRuntimeException(errorMessage);
}
};
}
  1. 使用方式

調用工具類參數(shù)參數(shù)后,調用函數(shù)式接口throwMessage方法傳入異常信息。當出入的參數(shù)為false時正常執(zhí)行

9fb69030-c09e-11ec-bce3-dac502259ad0.jpg

當出入的參數(shù)為true時拋出異常

9fc77472-c09e-11ec-bce3-dac502259ad0.jpg

處理if分支操作

  1. 定義函數(shù)式接口

創(chuàng)建一個名為BranchHandle的函數(shù)式接口,接口的參數(shù)為兩個Runnable接口。這兩個兩個Runnable接口分別代表了為truefalse時要進行的操作

/**
*分支處理接口
**/
@FunctionalInterface
publicinterfaceBranchHandle{

/**
*分支操作
*
*@paramtrueHandle為true時要進行的操作
*@paramfalseHandle為false時要進行的操作
*@returnvoid
**/
voidtrueOrFalseHandle(RunnabletrueHandle,RunnablefalseHandle);

}
  1. 編寫判斷方法

創(chuàng)建一個名為isTureOrFalse的方法,方法的返回值為剛才定義的函數(shù)式接口-BranchHandle。

/**
*參數(shù)為true或false時,分別進行不同的操作
*
*@paramb
*@returncom.example.demo.func.BranchHandle
**/
publicstaticBranchHandleisTureOrFalse(booleanb){

return(trueHandle,falseHandle)->{
if(b){
trueHandle.run();
}else{
falseHandle.run();
}
};
}
  1. 使用方式

參數(shù)為true時,執(zhí)行trueHandle

9fda6e06-c09e-11ec-bce3-dac502259ad0.jpg

參數(shù)為false時,執(zhí)行falseHandle

9fe64ef6-c09e-11ec-bce3-dac502259ad0.jpg

如果存在值執(zhí)行消費操作,否則執(zhí)行基于空的操作

  1. 定義函數(shù)

創(chuàng)建一個名為PresentOrElseHandler的函數(shù)式接口,接口的參數(shù)一個為Consumer接口。一個為Runnable,分別代表值不為空時執(zhí)行消費操作和值為空時執(zhí)行的其他操作

/**
*空值與非空值分支處理
*/
publicinterfacePresentOrElseHandler<TextendsObject>{

/**
*值不為空時執(zhí)行消費操作
*值為空時執(zhí)行其他的操作
*
*@paramaction值不為空時,執(zhí)行的消費操作
*@paramemptyAction值為空時,執(zhí)行的操作
*@returnvoid
**/
voidpresentOrElseHandle(ConsumersuperT>action,RunnableemptyAction);

}
  1. 編寫判斷方法

創(chuàng)建一個名為isBlankOrNoBlank的方法,方法的返回值為剛才定義的函數(shù)式接口-PresentOrElseHandler。

/**
*參數(shù)為true或false時,分別進行不同的操作
*
*@paramb
*@returncom.example.demo.func.BranchHandle
**/
publicstaticPresentOrElseHandlerisBlankOrNoBlank(Stringstr){

return(consumer,runnable)->{
if(str==null||str.length()==0){
runnable.run();
}else{
consumer.accept(str);
}
};
}
  1. 使用方式

調用工具類參數(shù)參數(shù)后,調用函數(shù)式接口presentOrElseHandle方法傳入一個ConsumerRunnable

參數(shù)不為空時,打印參數(shù)

9ff6e298-c09e-11ec-bce3-dac502259ad0.jpg

參數(shù)不為空時

-End-

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2948

    瀏覽量

    104377
  • 函數(shù)
    +關注

    關注

    3

    文章

    4262

    瀏覽量

    62243

原文標題:妙用Java8中的“Function”消滅if...else!

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    華納云:java web和java有什么區(qū)別java web和java有什么區(qū)別

    的平臺,Java可以用于開發(fā)桌面應用程序、移動應用程序、企業(yè)級應用程序等。 – Java Web是Java語言在Web開發(fā)領域的應用,它使用Java技術
    的頭像 發(fā)表于 07-16 13:35 ?523次閱讀
    華納云:<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別<b class='flag-5'>java</b> web和<b class='flag-5'>java</b>有什么區(qū)別

    java實現(xiàn)多線程的幾種方式

    了多種實現(xiàn)多線程的方式,本文將詳細介紹以下幾種方式: 1.繼承Thread類 2.實現(xiàn)Runnable接口 3.Callable和Future 4.線程池 5.Java 8
    的頭像 發(fā)表于 03-14 16:55 ?516次閱讀

    verilog task和function區(qū)別

    verilog中的task和function都是用于實現(xiàn)模塊中的可重復的功能,并且可以接收參數(shù)和返回結果。但是它們在編寫和使用上有一些區(qū)別。下面將詳細介紹task和function的區(qū)別。 語法結構
    的頭像 發(fā)表于 02-22 15:53 ?901次閱讀

    verilog中function和task的區(qū)別

    非常相似,但它們在功能和使用方式上有一些重要的區(qū)別。 定義和聲明方式不同: Function:使用關鍵字"function"定義和聲明。函數(shù)可以有一個或多個輸入?yún)?shù),可以有一個返回值。函數(shù)必須在聲明之后直接定義,不能在其他函數(shù)
    的頭像 發(fā)表于 02-22 15:40 ?1582次閱讀

    java環(huán)境配置成功后怎么運行

    Java環(huán)境配置成功后,我們可以使用幾種方式運行Java程序。下面將詳細介紹這幾種方式以及其使用方法。 命令行運行方式 在成功配置Java環(huán)境后,我們可以通過命令行
    的頭像 發(fā)表于 12-06 15:57 ?1746次閱讀

    Java各種類的區(qū)別

    Java中的類可以分為以下幾種類型:基本類、包裝類、自定義類、抽象類、接口類和內部類。 基本類: 基本類是Java語言中最基本的類,主要用于描述基本數(shù)據(jù)類型(如整型、浮點型、字符型等)。Jav
    的頭像 發(fā)表于 12-03 11:08 ?7559次閱讀

    Verilog代碼:if-else和case的電路結構和區(qū)別

    導致設計的更大延時,為了避免較大的路徑延遲,最好不要使用特別長的嵌套if結構。如想利用if語句實現(xiàn)那些對延時要求苛刻的路徑時,應將最高優(yōu)先級給最遲到達的關鍵信號。
    的頭像 發(fā)表于 11-29 15:10 ?2483次閱讀

    簡單了解Java的新特性

    Java 8Java 20,Java 已經(jīng)走過了漫長的道路,自 Java 8 以來,
    的頭像 發(fā)表于 11-23 16:38 ?993次閱讀
    簡單了解<b class='flag-5'>Java</b>的新特性

    java內存溢出排查方法

    模型。Java內存模型分為線程棧、堆、方法區(qū)(Java 8之前稱為永久代,Java 8后稱為元空間)和本地方法棧
    的頭像 發(fā)表于 11-23 14:46 ?2912次閱讀

    java接口是特殊的抽象類嗎

    Java接口是一種特殊的抽象類嗎? 在Java編程語言中,接口(interface)與抽象類(abstract class)是兩種不同的概念,盡管它們之間存在一些相似之處,但在設計和使
    的頭像 發(fā)表于 11-21 10:07 ?571次閱讀

    Java中抽象類和接口的介紹

    Java是一種面向對象的編程語言,提供了抽象類和接口兩種機制幫助開發(fā)人員組織和管理代碼。本文將詳細介紹Java語言中抽象類和接口的概念、特
    的頭像 發(fā)表于 11-21 09:47 ?412次閱讀

    java接口和抽象類的區(qū)別

    Java中的接口(Interface)和抽象類(Abstract class)都是抽象的概念,它們可以用來定義類的行為和特征。雖然它們具有一些相似之處,但也存在一些重要的區(qū)別。本文將詳盡介紹Java
    的頭像 發(fā)表于 11-21 09:45 ?484次閱讀

    妙用Java 8中的 Function接口,消滅if...else(非常新穎的寫法)

    使用注解@FunctionalInterface標識,并且只包含一個抽象方法的接口是函數(shù)式接口。函數(shù)式接口主要分為Supplier供給型函數(shù)、Consumer消費型函數(shù)、Runnable無參無返回型函數(shù)和
    的頭像 發(fā)表于 11-10 16:23 ?858次閱讀
    妙用<b class='flag-5'>Java</b> <b class='flag-5'>8</b>中的 <b class='flag-5'>Function</b><b class='flag-5'>接口</b>,<b class='flag-5'>消滅</b><b class='flag-5'>if...else</b>(非常新穎的寫法)

    shell并行執(zhí)行java腳本

    供一些代碼示例。 準備工作 在執(zhí)行Java程序之前,我們需要確保系統(tǒng)已經(jīng)安裝了Java開發(fā)環(huán)境(JDK)。你可以在終端中輸入以下命令檢查是否已安裝Java: 你可以使用GNU par
    的頭像 發(fā)表于 11-08 10:29 ?606次閱讀

    Java11和Java17使用率達48%和45%

    Java 8,使用率為 40%。85% 的受訪者使用的是 LTS 版本的 Java,64% 的受訪者使用了多個 Java 版本。
    的頭像 發(fā)表于 11-01 12:30 ?534次閱讀