Function Java 是一個促進 Java 函數式程式設計的開源函式庫。該庫實現了許多基本和高級程式設計抽象,有助於面向組合的開發。函數式 Java 也可以作為學習函數式程式設計概念的平台,透過使用熟悉的語言來介紹這些概念。
該庫旨在用於生產應用程序,並使用基於規範的自動化測試技術以及 ScalaCheck 和Functional Java 的快速檢查模組進行了徹底的測試。
函數式 Java 提供了以下類型的抽象:
基本資料結構 - 全部和部分函數、產品、單位、選項、無偏和右偏聯合(或驗證)、無效。
不可變集合 - 陣列、列表、向量、流、集合、映射、優先權佇列、手指樹、異質列表、差異列表。
其他抽象- 廬半群、半群、自然、隨機數產生器、讀取器、寫入器、狀態、輸入/輸出、解析器、拉鍊、基於規範的測試(快速檢查)、演員、光學(透鏡、棱鏡、折疊、遍歷等)、並發和類型轉換。
該專案的重要 URL 是:
網站,http://www.functionjava.org
網站儲存庫,http://github.com/functionjava/functionjava.github.io
Travis 持續整合構建,https://app.travis-ci.com/github/functionjava/functionjava
Sonatype 儲存庫,https://oss.sonatype.org/content/groups/public/org/functionjava/
Maven 中央儲存庫,https://mvnrepository.com/artifact/org.functionjava/functionjava
下載和使用該專案的建議方法是透過建立工具。
使用org.functionaljava
群組將功能性 Java 工件發佈到 Maven Central,其中包含三個已發佈的工件:
核心庫( functionaljava
)
基於屬性的測試( functionaljava-quickcheck
)
少量的 Java 8 支援( functionaljava-java-core
)
最新的穩定版本是5.0
。可以透過新增依賴項將其新增至您的 Gradle 專案:
編譯“org.functionjava:functionjava:5.0” 編譯“org.functionjava:functionjava-quickcheck:5.0” 編譯“org.functionjava:functionjava-java-core:5.0”
在 Maven 中:
<依賴關係> <groupId>org.functionjava</groupId> <artifactId>功能性java</artifactId> <版本>5.0</版本> </依賴> <依賴關係> <groupId>org.functionjava</groupId> <artifactId>功能性java-quickcheck</artifactId> <版本>5.0</版本> </依賴> <依賴關係> <groupId>org.functionjava</groupId> <artifactId>功能性java-java-core</artifactId> <版本>5.0</版本> </依賴>
使用 Java 8 和 Gradle 7.4 完成建置。在根目錄運行:
./gradlew
這需要存取 Java 8,並將下載 Gradle 建置工具和必要的依賴項並建置FunctionalJava。
上述功能的更完整描述是:
基本資料結構
元數為 1 到 8 的函數 ( fj.F
)。
元數為 0 到 8 的函數可能會產生異常 ( fj.Try
)。
參數數為 0 到 8 且傳回 void ( fj.Effect
) 的函數。
參數數為 0 到 8 的函數傳回 void 並可能引發異常 ( fj.TryEffect
)。
數量為 1 到 8 的產品 ( fj.P
)。
單位類型( fj.Unit
)。
可選值 -類型安全 null ( fj.data.Option
)。
不相交聯合資料型態 -組合異常處理( fj.data.Either
)。
驗證 -右偏組合異常處理( fj.data.Validation
)。
不可變集合
數組包裝器( fj.data.Array
)。
不可變的記憶體中單鍊錶 ( fj.data.List
)。
不可變的惰性單鍊錶( fj.data.Stream
)。
一個套件 ( fj.data.fingertrees
) 提供 2-3 個手指樹用於持久序列的功能表示,支援在分攤 O(1) 時間內存取末端。
類型安全的異質列表( fj.data.hlist
),用於不同類型的元素列表,而不犧牲類型安全。
使用紅色/黑色樹( fj.data.Set
)實現不可變集。
不可變的多路樹 - 又稱玫瑰樹( fj.data.Tree
)。
使用紅/黑樹實現的不可變樹圖( fj.data.TreeMap
)。
使用手指樹的不可變優先權佇列( fj.data.PriorityQueue
)。
差異列表,高效能列表。
其他抽象
么半群( fj.Monoid
)。
半群( fj.Semigroup
)。
自然數資料型態( fj.data.Natural
)。
使用線性同餘產生器( fj.LcgRng
) 的隨機數產生器。
Reader、Writer 和 State monad( fj.data.Reader
、 fj.data.Writer
、 fj.data.State
)。
用於抽象 IO 的輸入/輸出 monad ( fj.IO
)。
Monadic 解析器組合器,用於透過使用組合來組合較小的解析器來編寫解析器。
資料型別與標準 Java 類型之間的轉換。
FunctionJava 和 Java 8 特定型別之間的轉換。
HashMap 和 HashSet 的可配置相等性和哈希代碼。
流和樹的 Zipper 實作。
基於規範的自動化測試框架( fj.test
)。
用於平行計算( fj.control.parallel
)和分層抽象(例如平行映射、映射縮減、並行壓縮)的完全可操作的 Actor。
用於更新不可變資料的光學元件,包括鏡頭、棱鏡、iso、可選、遍歷、getter、fold 和 setter。受到 Scala Monocle 函式庫 (https://github.com/julien-truffaut/Monocle) 和 Haskell lens 函式庫 (https://github.com/ekmett/lens) 的啟發。
虛空,邏輯上無人居住的類型。
功能 Java 授權使用 BSD 3 授權(3 條款授權),可從 https://en.wikipedia.org/wiki/BSD_licenses 取得。
有關每個版本的發行說明,請參閱目錄連結:etc/release-notes。