簡體   English   中英

如何使用 Function 在函數式編程中實現這一點<t,r>在 Java</t,r>

[英]How to implement this in functional programming using Function<T,R> in Java

我有一個在命令式編程中會這樣的場景

processEvent(Event event) {
  if ( isEventOfSpecificType(event) ){ .............................................. 1

     Result result = findSomeData(event.someProperty()) ............................. 2
     if(result.someStatus == somevalue) { ........................................... 3

         saveEvent(event, result) // save to DB with properties from both objects ... 4
         String referenceID = createSomeRecord(event, result) // Will do API call ... 5
         writeToLogFile(event, result, referenceID) // write to a logfile ........... 6
     }
  }
}

我正在嘗試使用 Function、謂詞、消費者和供應商來圍繞 JAVA 中的函數式編程。

我的第一個想法是:使用流來利用過濾器和 map,但由於在這種情況下沒有集合,因此為一個 object 創建 stream 似乎不合適。

我的第二個想法:使用 Function 和咖喱,但我迷路了。 由於我在最后一步中需要所有三個對象,因此無法理解它。

如何以功能性的方式做到這一點。 了解該主題的最佳參考資料有哪些。

您可以使用 Optional APIs 編寫上述代碼,但您需要遵循函數式編程方法。

函數式編程(通常縮寫為 FP)是通過組合純函數來構建軟件的過程,避免共享 state、可變數據和副作用。 函數式編程是聲明式的而不是命令式的,應用程序 state 流經純函數。 與面向 object 的編程相比,應用程序 state 通常與對象中的方法共享並位於同一位置。

純 function 是 function,其中:

  • 給定相同的輸入,總是返回相同的 output,並且
  • 沒有副作用

您可以閱讀此博客: https://medium.com/javascript-scene/master-the-javascript-interview-what-is-functional-programming-7f218c68b3a0

因此,在您的情況下,不變性很重要。

    public void processEvent(final Event event) {
        Optional.of(event)
                .filter(this::isEventOfSpecificType)
                .map(e -> findSomeData(e.someProperty()))
                .ifPresent(r -> resultBiConsumer.accept(r, event));
    }

    private BiConsumer<Optional<Result>, Event> resultBiConsumer = (result, event) ->  {
            if(result.isPresent()) {
                Result r = result.get();
                if(r.getStatus() == 0) {
                    saveEvent(event, r);
                    String referenceID = createSomeRecord(event, r);
                    writeToLogFile(event, r, referenceID);
                }
            }
        };

Java 代碼塊說明為什么不變性在函數式編程中很重要。 https://belief-driven-design.com/functional-programming-with-java-immutability-ae3372311b9/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM