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

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

3天內(nèi)不再提示

利用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可以看作轉(zhuǎn)換型函數(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ù),并返回一個值。SupplierConsumerRunnable可以看作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ù)式接口-ThrowExceptionFunctionThrowExceptionFunction的接口實現(xiàn)邏輯為當參數(shù)btrue時拋出異常

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

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

調(diào)用工具類參數(shù)參數(shù)后,調(diào)用函數(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. 使用方式

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

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

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

參數(shù)不為空時

-End-

審核編輯 :李倩


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

    關注

    19

    文章

    2967

    瀏覽量

    104763
  • 函數(shù)
    +關注

    關注

    3

    文章

    4331

    瀏覽量

    62630

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

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

收藏 人收藏

    評論

    相關推薦

    Java 23功能介紹

    Java 23 包含全新和更新的 Java 語言功能、核心 API 以及 JVM,同時適合新的 Java 開發(fā)者和高級開發(fā)者。從?IntelliJ IDEA 2024.2?開始已支持 Java
    的頭像 發(fā)表于 12-04 10:02 ?209次閱讀
    <b class='flag-5'>Java</b> 23功能介紹

    Java集合API的改進介紹

    簡介 本文我們將探討不同 jdk 版本中各類的起源,以及新引入的類和接口背后的目的。我們將分析之前版本存在的問題,以及為何需要引入新的類或接口。此外,我們還將介紹集合類和接口中的新特性。文章將逐一
    的頭像 發(fā)表于 11-22 11:12 ?201次閱讀
    <b class='flag-5'>Java</b>集合API的改進介紹

    Java 枚舉與策略模式、函數(shù)式接口的結(jié)合:實現(xiàn)高內(nèi)聚低耦合的設計

    中,通常會使用枚舉定義業(yè)務上的一組常量,那除了簡單地定義常量之外,我們?nèi)绾?b class='flag-5'>利用枚舉實現(xiàn)高內(nèi)聚、低耦合的設計呢?下面介紹下枚舉和策略模式、函數(shù)式接口的組合應用。 二、枚舉+策略模式
    的頭像 發(fā)表于 11-21 14:06 ?214次閱讀

    能否利用TSW1400控制TX7316脈沖信號的發(fā)射,接收,波束形成?

    最近買了TX7316和TSW1400FPGA板,想請問一下,能否利用TSW1400控制TX7316脈沖信號的發(fā)射,接收,波束形成?如果可以的話,二者是利用什么接口連接的?是USB嗎
    發(fā)表于 11-20 08:18

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

    的平臺,Java可以用于開發(fā)桌面應用程序、移動應用程序、企業(yè)級應用程序等。 – Java Web是Java語言在Web開發(fā)領域的應用,它使用Java技術
    的頭像 發(fā)表于 07-16 13:35 ?811次閱讀
    華納云:<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ū)別

    接口測試的工具有哪些種類

    單元測試框架 單元測試框架主要用于測試單個模塊或函數(shù)的功能。雖然它們主要用于開發(fā)階段,但也可以用于接口測試。 1.1 JUnit (Java) JUnit 是 Java 語言的單元測試框架,支持自動化測試,可以測試
    的頭像 發(fā)表于 05-30 15:07 ?719次閱讀

    8芯M8接口需要經(jīng)常檢修嗎

    德索工程師說道雖然8芯M8接口具有優(yōu)異的性能和廣泛的應用領域,但在實際使用過程中,仍需要經(jīng)常進行檢修。盡管8芯M8
    的頭像 發(fā)表于 05-22 16:27 ?286次閱讀
    <b class='flag-5'>8</b>芯M<b class='flag-5'>8</b><b class='flag-5'>接口</b>需要經(jīng)常檢修嗎

    5芯M8接口的靈敏度怎么樣

    德索工程師說道為了準確評估5芯M8接口的靈敏度,需要采用適當?shù)臏y試方法。在靜態(tài)條件下,向接口輸入不同幅值的信號,觀察接口的響應情況。通過測量接口
    的頭像 發(fā)表于 05-22 16:04 ?268次閱讀
    5芯M<b class='flag-5'>8</b><b class='flag-5'>接口</b>的靈敏度怎么樣

    Oracle確認Java/JDK 11官方支持延長至2032年1月?

    此外,Solaris操作系統(tǒng)上的Java SE 8Java SE 11的官方支持也同步延期至2030年12月及2032年1月,進一步延長了該平臺上的Java服務周期。
    的頭像 發(fā)表于 05-16 15:57 ?1253次閱讀

    深入理解Java 8內(nèi)存管理機制及故障排查實戰(zhàn)指南

    Java的自動內(nèi)存管理機制是由 JVM 中的垃圾收集器實現(xiàn)的,垃圾收集器會定期掃描堆內(nèi)存中的對象,檢測并清除不再使用的對象,以釋放內(nèi)存資源。
    的頭像 發(fā)表于 04-04 08:10 ?1005次閱讀
    深入理解<b class='flag-5'>Java</b> <b class='flag-5'>8</b>內(nèi)存管理機制及故障排查實戰(zhàn)指南

    M12 8接口鍵控

    德索工程師說道在M12 8接口中,鍵控技術主要用于實現(xiàn)接口的鎖定與解鎖、配置選擇以及設備識別等功能。通過鍵控技術,用戶可以方便地對M12 8接口
    的頭像 發(fā)表于 03-21 15:05 ?345次閱讀
    M12 <b class='flag-5'>8</b>芯<b class='flag-5'>接口</b>鍵控

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

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

    verilog task和function區(qū)別

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

    verilog function函數(shù)的用法

    Verilog 是一種硬件描述語言 (HDL),主要用于描述數(shù)字電子電路的行為和結(jié)構(gòu)。在 Verilog 中,函數(shù) (Function) 是一種用于執(zhí)行特定任務并返回一個值的可重用代碼塊。函數(shù)在
    的頭像 發(fā)表于 02-22 15:49 ?5714次閱讀

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

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