![](/img/trans.png)
[英]Generic method as functional programming using java.util.Function
[英]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,其中:
因此,在您的情況下,不變性很重要。
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.