使用 MathFlux
1. 概述
Spring 響應式程式設計引入了響應式和可擴展應用程式的新時代。 Project Reactor 是一個卓越的工具包,用於管理此生態系統中的非同步和事件驅動程式設計。
MathFlux 是 Project Reactor 的一個元件,它為我們提供了各種專為反應式程式設計的數學函數。
在本教程中,我們將探索 Project Reactor 中的 MathFlux 模組,並了解如何利用它對反應流執行各種數學運算。
2.Maven依賴
讓我們在 IDE 中建立一個 Spring Boot 項目,並將[reactor-core](https://mvnrepository.com/artifact/io.projectreactor/reactor-core)
和[reactor-extra](https://mvnrepository.com/artifact/io.projectreactor.addons/reactor-extra)
依賴項新增到pom.xml
檔案中:
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>io.projectreactor.addons</groupId>
<artifactId>reactor-extra</artifactId>
<version>3.5.1</version>
</dependency>
此外,我們需要包含reactor-test
來有效測試我們的程式碼:
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<version>3.5.1</version>
<scope>test</scope>
</dependency>
3. 使用MathFlux
的基本數學函數
MathFlux
中的大多數函數都要求輸入基數大於 1,並產生基數為 1 的輸出。
這些函數通常接受Flux
作為輸入並傳回Mono
作為輸出。
reactor.math
套件包含一個名為MathFlux
靜態類,它是Flux
的專用版本,其中包含數學運算符,例如max()
、 min()
、 sumInt(),
和averageDouble()
。
可以透過呼叫MathFlux
類別的關聯方法來執行數學運算。
讓我們詳細探討MathFlux
基本數學函數。
3.1.和
sumInt()
方法計算整數Flux
中元素的總和。它簡化了反應流中數值的相加。
我們現在將為方法sumInt()
建立一個單元測試.
我們將使用StepVerifier
來測試我們的程式碼。
此單元測試確保sumInt()
方法準確計算給定Flux
中的元素總和,並驗證實現的正確性:
@Test
void givenFluxOfNumbers_whenCalculatingSum_thenExpectCorrectResult() {
Flux<Integer> numbers = Flux.just(1, 2, 3, 4, 5);
Mono<Integer> sumMono = MathFlux.sumInt(numbers);
StepVerifier.create(sumMono)
.expectNext(15)
.verifyComplete();
}
我們首先建立一個代表資料集的整數Flux
。然後將此Flux
作為參數傳遞給sumInt()
方法。
3.2.平均的
averageDouble()
方法計算Flux
中元素的平均值,這有助於計算輸入的平均值。
此單元測試計算整數1
到5
的平均值,並與預期結果3
進行比較:
@Test
void givenFluxOfNumbers_whenCalculatingAverage_thenExpectCorrectResult() {
Flux<Integer> numbers = Flux.just(1, 2, 3, 4, 5);
Mono<Double> averageMono = MathFlux.averageDouble(numbers);
StepVerifier.create(averageMono)
.expectNext(3.0)
.verifyComplete();
}
3.3.最小
min()
方法確定整數Flux
中的最小值。
此單元測試旨在驗證min()
方法的功能:
@Test
void givenFluxOfNumbers_whenFindingMinElement_thenExpectCorrectResult() {
Flux<Integer> numbers = Flux.just(3, 1, 5, 2, 4);
Mono<Integer> minMono = MathFlux.min(numbers);
StepVerifier.create(minMono)
.expectNext(1)
.verifyComplete();
}
3.4.最大限度
我們可以使用MathFlux
中的max()
函數來找出最高元素。輸出封裝在Mono<Integer>
中,它表示發出單一Integer
結果的反應流。
此單元測試驗證Flux
中最大整數的正確識別:
@Test
void givenFluxOfNumbers_whenFindingMaxElement_thenExpectCorrectResult() {
Flux<Integer> numbers = Flux.just(3, 1, 5, 2, 4);
Mono<Integer> maxMono = MathFlux.max(numbers);
StepVerifier.create(maxMono)
.expectNext(5)
.verifyComplete();
}
此單元測試中給定的Flux
包含3
、 1
、 5
、 2,
和4
。 max()
方法的目的在於辨識最大元素,在本例中為5
。
4。結論
在本文中,我們討論了 MathFlux 在 Spring Reactive 程式設計中的使用。透過利用它的功能,我們可以簡化反應式應用程式中複雜的數學任務。我們看到 MathFlux 使我們能夠無縫管理複雜的資料處理,使 Spring Reactive 應用程式更加直觀和健全。
與往常一樣,本教學的源代碼可在 GitHub 上取得。