色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

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

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

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

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

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

Function 函數式接口

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

Function可以看作轉換型函數

Supplier供給型函數

Supplier的表現形式為不接受參數、只返回數據

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

Consumer消費型函數

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

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

Runnable無參無返回型函數

Runnable的表現形式為即沒有參數也沒有返回值

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

Function函數的表現形式為接收一個參數,并返回一個值。SupplierConsumerRunnable可以看作Function的一種特殊表現形式

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

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

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

使用小技巧

處理拋出異常的if

  1. 定義函數

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

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

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

創建工具類VUtils并創建一個isTure方法,方法的返回值為剛才定義的函數式接口-ThrowExceptionFunctionThrowExceptionFunction的接口實現邏輯為當參數btrue時拋出異常

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

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

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

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

當出入的參數為true時拋出異常

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

處理if分支操作

  1. 定義函數式接口

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

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

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

}
  1. 編寫判斷方法

創建一個名為isTureOrFalse的方法,方法的返回值為剛才定義的函數式接口-BranchHandle

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

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

參數為true時,執行trueHandle

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

參數為false時,執行falseHandle

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

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

  1. 定義函數

創建一個名為PresentOrElseHandler的函數式接口,接口的參數一個為Consumer接口。一個為Runnable,分別代表值不為空時執行消費操作和值為空時執行的其他操作

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

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

}
  1. 編寫判斷方法

創建一個名為isBlankOrNoBlank的方法,方法的返回值為剛才定義的函數式接口-PresentOrElseHandler

/**
*參數為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. 使用方式

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

參數不為空時,打印參數

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

參數不為空時

-End-

審核編輯 :李倩


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

    關注

    19

    文章

    2972

    瀏覽量

    104868
  • 函數
    +關注

    關注

    3

    文章

    4338

    瀏覽量

    62767

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

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

收藏 人收藏

    評論

    相關推薦

    利用FPGA實現USB 2.0通信接口

    USB?2.0接口的實現方式 利用FPGA實現USB 2.0接口的方式一般有兩種,一是借助外圍的USB接口芯片,二是FPGA內部實現USB
    的頭像 發表于 12-30 13:59 ?406次閱讀
    <b class='flag-5'>利用</b>FPGA實現USB 2.0通信<b class='flag-5'>接口</b>

    Java 23功能介紹

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

    Java集合API的改進介紹

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

    Java 枚舉與策略模式、函數式接口的結合:實現高內聚低耦合的設計

    中,通常會使用枚舉定義業務上的一組常量,那除了簡單地定義常量之外,我們如何利用枚舉實現高內聚、低耦合的設計呢?下面介紹下枚舉和策略模式、函數式接口的組合應用。 二、枚舉+策略模式
    的頭像 發表于 11-21 14:06 ?246次閱讀

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

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

    華納云:java web和java有什么區別java web和java有什么區別

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

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

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

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

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

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

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

    深入理解Java 8內存管理機制及故障排查實戰指南

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

    M12 8接口鍵控

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

    java實現多線程的幾種方式

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

    verilog task和function區別

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

    verilog function函數的用法

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

    verilog中function和task的區別

    非常相似,但它們在功能和使用方式上有一些重要的區別。 定義和聲明方式不同: Function:使用關鍵字"function"定義和聲明。函數可以有一個或多個輸入參數,可以有一個返回值。函數必須在聲明之后直接定義,不能在其他函數
    的頭像 發表于 02-22 15:40 ?1953次閱讀
    主站蜘蛛池模板: 熟女人妻久久精品AV天堂| 国产在线观看不卡| 日日撸影院在线| 激情内射亚洲一区二区三区爱妻 | 中文有码中文字幕免费视频| 日韩亚洲视频一区二区三区| 久久热国产在线视频| 国产精品永久免费视频| DASD-700美谷朱里| 长篇高h肉爽文丝袜| 性色香蕉AV久久久天天网| 青草在线观看视频| 啦啦啦WWW在线观看免费高清版| 国产剧情福利AV一区二区| YELLOW视频直播在线观看高清| 伊人亚洲综合青草青草久热| 午夜伦理在线观看| 日韩免费一区| 欧美阿v天堂视频在99线| 久久re视频这里精品09免费| 国产欧美亚洲综合第一页| 夫外出被公侵犯日本电影| a级销魂美女| 99re6久久热在线视频| 在线观看免费av网站| 亚洲免费人成 久久| 亚洲 自拍 偷拍 另类综合图区| 色情内射少妇兽交| 日本高清片免费观看| 朋友的娇妻好爽好烫嗯| 男人叼女人| 男女AA片免费| 免费看午夜高清性色生活片| 久久精品天天中文字幕| 解开美女胸衣2破解版| 国产又黄又硬又粗| 国产无线乱码一区二三区| 国产精品乱人无码伦AV在线A| 俄罗斯美幼| 国产成人综合在线视频| 国产av在在免费线观看美女|