日发帖 发帖频率 发帖时段_先发帖
生活随笔
收集整理的這篇文章主要介紹了
日发帖 发帖频率 发帖时段_先发帖
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
日發帖 發帖頻率 發帖時段
通常,我們編寫代碼來計算出一堆可用的答案。 讓我們來看一下Java中的情況。
public Widget getAppropriateWidget(CustomerRequest request) { if (shelfstock.contains(request.getBarcode()) { return new ShelfWidget(); } if (backroomStock.contains(request.getBarcode()) { return new BackroomWidget(); } if (supplier.contains(request.getEan()) { return new SupplierWidget(); } return null ; }您將不得不想象更復雜的場景,隱藏在上面的簡化代碼后面。 該算法的作用是按優先級順序嘗試選項,直到找到有效的選項,否則將失敗,在這種情況下它將不返回任何內容。
我們還可以想象一下,由于某些原因,對contains的調用很昂貴–也許每個對象都隱藏了一個Web服務或復雜的數據庫查詢。
讓我們以兩種方式重構上面的代碼開始。 讓我們使用Optional ,讓它為每個方法使用子例程。
public Optional<Widget> getAppropriateWidget(CustomerRequest request) { Optional<Widget> shelfWidget = getShelfWidget(request); if (shelfWidget.isPresent()) { return shelfWidget; } Optional<Widget> backroomWidget = getBackroomWidget(request); if (backroomWidget.isPresent()) { return backroomWidget; } Optional<Widget> supplierWidget = getSupplierWidget(request); if (supplierWidget.isPresent()) { return supplierWidget; } return Optional.empty; } // imagine the subsidiary functions所以,這是有點優于的null是不發現的回報,正努力使用子程序,使這個功能描述了自身,但它具有與每個的事實麻煩Optional返回的對象不能被鏈接到一個責任鏈。
我們可以作弊:
Optional<Widget> shelfWidget = getShelfWidget(request); Optional<Widget> backroomWidget = getBackroomWidget(request); Optional<Widget> supplierWidget = getSupplierWidget(request); return firstNonEmpty(shelfWidget, backroomWidget, supplierWidget); private static Optional<Widget> firstNonEmpty( Optional<Widget> ... options) { return Arrays.stream(options) .filter(Optional::isPresent) .findFirst() // makes an optional of optional here... .orElse(Optional.empty()); }上面的代碼更好一些,但是現在必須在選擇一個答案之前預先計算所有可能的答案。 如果答案很快就會出現,我們就需要避免成本高昂的期權計算。
帶有可選解決方案的第一個過去的帖子
將流或varargs數組傳遞給一個函數,該函數由將提供可選值的對象組成。 如果它們中的任何一個提供非空值,則獲勝。
// calling code public Optional<Widget> getAppropriateWidget(CustomerRequest request) { return firstAvailable(() -> getShelfWidget(request), () -> getBackroomWidget(request), () -> getSupplierWidget(request)); } // this is a general purpose solution // feel free to use it @SafeVarargs private static <T> Optional<T> firstAvailable( Supplier<Optional<T>> ... options) { return Arrays.stream(options) .map(Supplier::get) .filter(Optional::isPresent) .findFirst() .orElse(Optional.empty()); }翻譯自: https://www.javacodegeeks.com/2019/11/first-past-the-post.html
日發帖 發帖頻率 發帖時段
總結
以上是生活随笔為你收集整理的日发帖 发帖频率 发帖时段_先发帖的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cuba.platform_CUBA 7
- 下一篇: jdk8 cms g1gc_JDK 14