日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

完善資料讓更多小伙伴認識你,還能領(lǐ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ù),并返回一個值。Supplier、ConsumerRunnable可以看作Function的一種特殊表現(xiàn)形式

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

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

項目地址: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. 使用方式

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

    關(guān)注

    20

    文章

    3012

    瀏覽量

    116872
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4422

    瀏覽量

    67869

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    黑馬-Java+AI新版V16零基礎(chǔ)就業(yè)班百度云網(wǎng)盤下載+Java+AI全棧開發(fā)工程師

    逼近這一水平。目前生產(chǎn)級驗證充分的三條技術(shù)線:一是 ONNX Runtime Java 綁定 ,支持加載主流框架導出的 ONNX 模型,利用內(nèi)置的 CPU/GPU 執(zhí)行提供跨平臺高性能;二是 Deep
    發(fā)表于 05-01 11:29

    [完結(jié)15章]Java轉(zhuǎn) AI高薪領(lǐng)域必備-從0到1打通生產(chǎn)級AI Agent開發(fā)

    編寫的推理引擎(如TensorRT、ONNX Runtime)進行無縫對接。將訓練好的模型封裝為標準的Java微服務,利用JVM的內(nèi)存管理與線程池技術(shù),去承載企業(yè)級高吞吐的AI推理請求,這才是Java
    發(fā)表于 04-30 13:46

    Java轉(zhuǎn) AI高薪領(lǐng)域必備 從0到1打通生產(chǎn)級AI Agent開發(fā) 教程資料

    。隨著低代碼平臺的成熟、基礎(chǔ)框架的高度封裝以及AI代碼助手的普及,純業(yè)務邏輯的編寫已經(jīng)從“技術(shù)活”退化成了“體力活”。當市場上充斥著大量同質(zhì)化的“接口制造機”時,Java程序員不可避免地陷入了殘酷的內(nèi)卷
    發(fā)表于 04-29 17:08

    Java并發(fā)編程的“基石”——多線程概念初識

    Function & Memory API(Project Panama)取代,使得 Java 調(diào)度器能夠以極低的延遲直接讀取底層 C++ 編寫的 GPU 硬件指標;同時,Java
    發(fā)表于 04-16 18:50

    MAX6960:4線串行接口8x8矩陣圖形LED驅(qū)動器的深度解析

    MAX6960 - MAX6963:4線串行接口8x8矩陣圖形LED驅(qū)動器的深度解析 在當今的電子設(shè)備中,LED顯示技術(shù)無處不在。對于工程師而言,選擇合適的LED驅(qū)動器至關(guān)重要。今天我們就來深入探討
    的頭像 發(fā)表于 02-03 15:25 ?2477次閱讀

    Arm Neoverse CPU上大代碼量Java應用的性能測試

    Java 是互聯(lián)網(wǎng)領(lǐng)域廣泛使用的編程語言。Java 應用的一些特性使其性能表現(xiàn)與提前編譯的原生應用(例如 C 程序)大相徑庭。由于 Java 字節(jié)碼無法直接在 CPU 上執(zhí)行,因此通常運行時在
    的頭像 發(fā)表于 11-05 11:25 ?963次閱讀
    Arm Neoverse CPU上大代碼量<b class='flag-5'>Java</b>應用的性能測試

    利用C語言union特性定義RGB565格式

    本次分享的內(nèi)容是利用C語言union特性定義RGB565格式 1)前言 在做視覺相關(guān)的任務時,相機的輸入一般會是RGB565(uint16_t)的格式,而我們需要把它顯式轉(zhuǎn)換成RGB三通
    發(fā)表于 10-30 08:26

    全新ES8掉頭能有多敏捷

    隨著全新ES8媒體試駕及用戶試駕的持續(xù)進行,有許多朋友表示:“全新ES8作為中國最大的純電SUV,開起來卻沒有傳統(tǒng)大車的笨重感”。這正是智能敏捷掉頭功能的功勞,也是蔚全棧自研能力的顯現(xiàn)。全新ES
    的頭像 發(fā)表于 09-22 11:48 ?1387次閱讀

    Java效率提升指南:5個Java工具選型建議及Perforce JRebel和XRebel介紹

    企業(yè)級Java環(huán)境越來越復雜,真正的破局點,可能不在“人”,而在于“工具”。5個實用建議,幫你理清Java工具的選型思路。
    的頭像 發(fā)表于 09-11 13:59 ?1979次閱讀
    <b class='flag-5'>Java</b>效率提升指南:5個<b class='flag-5'>Java</b>工具選型建議及Perforce JRebel和XRebel介紹

    全新ES8預售發(fā)布

    2025年8月21日,全場景科技旗艦SUV——蔚全新ES8預售發(fā)布。
    的頭像 發(fā)表于 08-22 16:49 ?2065次閱讀

    全新蔚ES8屏幕配置解析

    8月21日,第三代全新蔚ES8閃亮登場,歷經(jīng)7年積累進化,以“王者歸來”之勢,引領(lǐng)豪華大三排SUV進入純電時代。
    的頭像 發(fā)表于 08-22 16:45 ?1854次閱讀

    利用Arm i8mm指令優(yōu)化llama.cpp

    本文將為你介紹如何利用 Arm i8mm 指令,具體來說,是通過帶符號 8 位整數(shù)矩陣乘加指令 smmla,優(yōu)化 llama.cpp 中 Q6_K 和 Q4_K 量化模型推理。
    的頭像 發(fā)表于 07-24 09:51 ?2225次閱讀
    <b class='flag-5'>利用</b>Arm i<b class='flag-5'>8</b>mm指令優(yōu)化llama.cpp

    如何調(diào)用C的接口封裝micropyton接口?

    microPython的庫比較少,無法滿足需求,請問調(diào)用C的接口封裝micropyton接口如何操作?能否提供詳細步驟? 你好,可以參考micropython官方的教程添加自定義的
    發(fā)表于 06-23 07:17

    EtherCAT運動控制卡應用開發(fā)教程之Java

    運動控制卡的Java開發(fā)及DLL調(diào)用
    的頭像 發(fā)表于 06-13 14:29 ?1034次閱讀
    EtherCAT運動控制卡應用開發(fā)教程之<b class='flag-5'>Java</b>

    在IAR Arm開發(fā)工具鏈中--function_sections編譯選項的使用

    本文主要介紹在IAR Arm開發(fā)工具鏈中不修改源代碼的情況下使用??function_sections編譯選項把函數(shù)放到單獨的section。
    的頭像 發(fā)表于 06-13 13:53 ?1989次閱讀
    在IAR Arm開發(fā)工具鏈中--<b class='flag-5'>function</b>_sections編譯選項的使用
    宜兰市| 桦甸市| 凉城县| 保德县| 阳原县| 九龙县| 阳江市| 朝阳区| 白河县| 鲁山县| 吐鲁番市| 尉氏县| 中西区| 社旗县| 宕昌县| 泰州市| 开远市| 上高县| 灵川县| 澄迈县| 图木舒克市| 巢湖市| 资兴市| 宁乡县| 北海市| 浏阳市| 竹山县| 平湖市| 厦门市| 平邑县| 宁化县| 英超| 山东| 邵阳市| 广灵县| 南溪县| 佛教| 永吉县| 青田县| 墨脱县| 峨山|