java實現一個方法,isTure則程序繼續往下,為false則return的鏈式寫法

以下是實現鏈式條件檢查的Java方法,采用函數式風格設計。代碼包含一個Chainable類,支持連續的check方法和多個終止操作(如then, orElse等),滿足在條件為false時中斷鏈式調用并返回默認值的需求:

import java.util.Optional;
import java.util.function.Supplier;public class Chainable {private boolean shouldProceed = true;private Chainable() {}// 起始方法public static Chainable start() {return new Chainable();}// 核心檢查方法:滿足條件則繼續,不滿足則中斷后續鏈式調用public Chainable check(Supplier<Boolean> conditionSupplier) {if (shouldProceed) {this.shouldProceed = conditionSupplier.get();}return this;}// 簡化版檢查(直接使用布爾值)public Chainable check(boolean condition) {return check(() -> condition);}// 執行操作并返回結果(中斷時返回null)public <R> R then(Supplier<R> supplier) {return shouldProceed ? supplier.get() : null;}// 執行無返回值操作public void then(Runnable runnable) {if (shouldProceed) runnable.run();}// 執行操作并返回Optional(中斷時返回空Optional)public <R> Optional<R> thenOptional(Supplier<R> supplier) {return shouldProceed ? Optional.ofNullable(supplier.get()) : Optional.empty();}// 中斷時返回指定默認值public <R> R orElse(Supplier<R> supplier, R defaultValue) {return shouldProceed ? supplier.get() : defaultValue;}// 中斷時執行備選操作public <R> R orElseGet(Supplier<R> mainSupplier, Supplier<R> backupSupplier) {return shouldProceed ? mainSupplier.get() : backupSupplier.get();}// 中斷時拋出指定異常public <R> R orElseThrow(Supplier<R> supplier, Supplier<? extends RuntimeException> exceptionSupplier) {if (!shouldProceed) throw exceptionSupplier.get();return supplier.get();}
}

使用示例

public static void main(String[] args) {// 示例1:條件全部滿足時返回計算結果Integer result1 = Chainable.start().check(() -> 10 > 5).check(() -> 20 > 15).then(() -> 10 + 20);System.out.println("Result 1: " + result1); // 輸出 30// 示例2:條件不滿足時返回默認值String result2 = Chainable.start().check(false) // 直接中斷.check(() -> { System.out.println("此代碼不會執行");return true;}).orElse(() -> "成功", "失敗");System.out.println("Result 2: " + result2); // 輸出 "失敗"// 示例3:中斷時拋出異常try {Chainable.start().check(3 > 5).orElseThrow(() -> "計算結果",() -> new IllegalStateException("條件檢查失敗"));} catch (Exception e) {System.out.println("Caught: " + e.getMessage()); // 輸出異常信息}// 示例4:無返回值的操作Chainable.start().check(() -> true).then(() -> System.out.println("操作被執行")); // 正常輸出// 示例5:使用Optional避免nullOptional<String> optional = Chainable.start().check(false).thenOptional(() -> "不會執行");System.out.println("Optional: " + optional.isPresent()); // 輸出 false
}

關鍵特性:

  1. ?鏈式中斷機制? - 當任何check失敗時,后續鏈式調用自動跳過
  2. ?延遲計算? - 使用Supplier<Boolean>避免不必要的條件計算
  3. ?多終止操作?:
    • then():返回結果或null
    • thenOptional():返回安全容器
    • orElse():提供默認值
    • orElseThrow():中斷時拋出異常
  4. ?類型安全? - 通過泛型支持任意返回類型
  5. ?空值安全? - Optional包裝避免NPE

此實現通過函數式接口保持代碼簡潔,同時提供靈活的中斷處理和多種返回策略,符合現代Java編程風格。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90800.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90800.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90800.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構學習之堆

本篇我們將學習新的數據結構——二叉樹。 作者的個人gitee&#xff1a;樓田莉子 (riko-lou-tian) - Gitee.com 目錄 樹的概念 樹形結構 非樹形結構 樹的相關術語 樹的表示 樹在實際生活上的應用 二叉樹 慢二叉樹 完全二叉樹 二叉樹的儲存結構 二叉樹的存儲結構 順序結構…

【csdn問答社區分析】前端開發熱點問題全解析

前端時間我在csdn問答社區的前端部分"視察”了一圈發現了大家的問題主要集中在以下方面一、框架與組件庫使用問題 Vue相關問題 組件化開發&#xff1a;如avue-crud組件自定義樣式不生效、el-select大數據分頁懶加載、element-plus表格動態列校驗等。功能實現&#xff1a;包…

Pycharm2025 安裝教程 免費分享 沒任何套路

Pycharm 安裝也是很簡單的&#xff0c;簡單過一下流程&#xff0c;如果需要的可以轉存下載到自己電腦上。我用夸克網盤分享了「pycharm2025」&#xff0c;復制鏈接瀏覽器打開轉存后即可下載。鏈接&#xff1a;https://pan.quark.cn/s/4bb74a939332備注&#xff1a;附帶2023-202…

Javaweb————什么是超文本傳輸協議?

&#x1f3cd;?&#x1f3cd;?&#x1f3cd;?引言&#xff1a;什么是協議&#xff1f; 協議是一種約定&#xff0c;規定好一種信息的格式&#xff0c;如果發送方按照這種請求格式發送信息,那么接 收端就要按照這樣的格式解析數據,否則就會出錯&#xff0c;這就是協議 常用協…

UniappDay03

1.熱門推薦-準備工作// 用defineProps獲取頁面參數,query const query defineProps<{type: string }>() const currHot hotMap.find((v) > v.type query.type) // 動態設置標題 uni.setNavigationBarTitle({ title: currHot!.title }) </script>2.獲取熱門推…

基于動態增強的 LLM 置信度方法研究

基于動態增強的 LLM 置信度方法研究 一、引言(Introduction) 大型語言模型(LLM)的性能提升高度依賴于對模型內部表征的精準調控 —— 表征工程通過優化模型中間層隱藏狀態的傳遞規律,能夠在不改變模型參數的前提下顯著提升任務適應性(Wei et al., 2022)。當前主流方法中…

ComfyUI中運行Wan 2.1工作流,電影級視頻,兼容Mac Windows

魔當(LM Downloader)是一個大模型應用下載工具 &#xff0c;目前 魔當 已經支持ComfyUI下載Wan 2.1視頻模型。 魔當下載地址 https://seemts.com/ 先看生成效果 原始圖片&#xff0c;你可以保存到自己電腦上測試 生成視頻&#xff1a; 推薦提示詞&#xff1a; A futurist…

CentOS 7 Linux 用 yum 安裝 Docker,含 Docker 鏡像無法拉取問題(即 docker pull 失敗)的解決方案

CentOS 7 Linux 用 yum 安裝 Docker,含 Docker 鏡像無法拉取問題(即 docker pull 失敗)的解決方案 本文對應的講解視頻鏈接:https://www.bilibili.com/video/BV1C48wzqE6T/ 文章目錄 CentOS 7 Linux 用 yum 安裝 Docker,含 Docker 鏡像無法拉取問題(即 docker pull 失敗…

XML的簡略知識點

文章目錄1. 基本概念2. 基本語法3. 示例4. 相關技術5. 應用場景XML&#xff08;可擴展標記語言&#xff09;是一種用于存儲和傳輸數據的標記語言&#xff0c;核心特點是可擴展性和自我描述性。以下是其核心知識點&#xff1a; 1. 基本概念 用途&#xff1a;主要用于數據的存儲…

RustDesk 完整部署教程:支持 Web 管理后臺和網頁客戶端遠程,保姆級教學來了!

RustDesk API本項目使用 Go 實現了 RustDesk 的 API&#xff0c;并包含了 Web Admin 和 Web 客戶端。RustDesk是一個遠程桌面軟件&#xff0c;提供了自托管的解決方案&#xff0c;官方API是收費的&#xff0c;這次咱們用到的是Github開源的第三方API源碼。?特性PC端API支持 …

??GOFLY LIVE CHAT:Golang製オープンソース?ライブチャットシステム?

以下是為日本技術受眾優化的日語版介紹文章&#xff0c;采用IT行業慣用術語和簡潔表達&#xff1a; ??GOFLY LIVE CHAT&#xff1a;Golang製オープンソース?ライブチャットシステム?? ??現代的なカスタマーサポートのための高性能ソリューション?? GOFLY LIVE CHATは…

ISIS GR實驗案例

一、實驗拓撲路由器R1和R2都為雙主控設備&#xff0c;主用板和備用板間形成備份關系。路由器間通過IS-IS協議實現網絡互連&#xff0c;并提供GR機制。要求當R1通過GR方式重啟IS-IS進程或者進行主備倒換時轉發不中斷。1、基礎配置AR1 system sysname AR1 int g 0/0/0 ip add 10.…

智慧農業病蟲害識別準確率↑32%:陌訊多模態融合算法實戰解析

原創聲明本文為原創技術解析&#xff0c;核心技術參數與架構設計引用自《陌訊技術白皮書》&#xff0c;禁止未經授權的轉載與篡改。一、行業痛點&#xff1a;智慧農業的識別困境智慧農業中&#xff0c;作物病蟲害的精準識別是實現精準植保的核心&#xff0c;但田間復雜環境始終…

# JsSIP 從入門到實戰:構建你的第一個 Web 電話

前言 歡迎來到實時通信&#xff08;Real-Time Communication, RTC&#xff09;的世界&#xff01;如果你是一名 JavaScript 開發者&#xff0c;渴望讓你的 Web 應用擁有語音通話、視頻聊天甚至即時消息的能力&#xff0c;那么你來對地方了。這本書是為你量身打造的指南&#x…

【RHCSA 問答題】第 12 章 安裝和更新軟件包

目錄什么是 RPM&#xff1f;dnf 是什么&#xff0c;它和 rpm 有什么聯系和區別&#xff1f;如何設置禁止直接遠程登錄 root 賬戶&#xff1f;RHEL 中如何做才能啟用對第三方存儲庫的支持&#xff1f;怎么理解 RHEL9 中的應用流(Application Streams)和模塊(Modules)&#xff1f…

GEO優化實戰:如何在DeepSeek、豆包等AI平臺搶占推薦位?

在當今競爭激烈的 AI 領域&#xff0c;GEO 優化在搶占 AI 平臺推薦位上的重要性日益凸顯。各大平臺都在為優質內容和企業爭取更好的展示機會&#xff0c;與此同時&#xff0c;一個現象引發了眾人關注&#xff1a;眾多企業大力推薦天津誠智未來公司&#xff0c;這背后究竟隱藏著…

機器學習——隨機森林算法分類問題案例解析(sklearn)

1. 集成學習&#xff1a;三個臭皮匠&#xff0c;如何賽過諸葛亮&#xff1f;我們之前學習的線性回歸、決策樹等算法&#xff0c;就像是團隊里的某一位“專家”。這位專家可能在某個領域很擅長&#xff0c;但單憑他一人&#xff0c;要解決復雜多變的問題&#xff0c;總會遇到瓶頸…

Mermaid流程圖

手動畫流程圖太復雜了&#xff0c;用極少的字符生成圖表是人生的夢想。 Mermaid Chart - Create complex, visual diagrams with text. A smarter way of creating diagrams. Linux開始菜單流程圖 flowchartA(["StartMenu"]) --> B["/usr/share/applicati…

Compose筆記(三十八)--CompositionLocal

這一節主要了解一下CompositionLocal&#xff0c;CompositionLocal是Jetpack Compose中用于組件樹內隱式數據傳遞的核心機制&#xff0c;其設計初衷是解決跨多層組件的數據共享問題&#xff0c;避免通過函數參數逐層傳遞數據。簡單總結:API: (1)compositionLocalOf<T>創建…

解決uniapp 使用uview生成小程序包太大無法上傳的問題

直接打包的插件內容優化后完美上傳&#xff0c; 相信眼尖的小伙伴已經發現了問題的關鍵 uview 會在每個組件里重復引css。導致包太大。 并且 它的格式是 data-v-哈希 沒法簡單的處理 需要壓縮通用規則。然后 再引用壓縮后的規則例如是然后 成功上傳