Java 中的 Stream 的 reduce 操作
Mohammad Irfan
2023年1月30日
2022年5月1日
-
Java 中的
reduce
是什麼 -
Java 8 中的流
reduce()
操作 -
在 Java 中使用
reduce()
運算求和 -
在 Java 中使用
reduce()
和方法參考求和 -
在 Java 中使用
reduce()
操作查詢最小值和最大值 - まとめ
本教程將討論 reduce()
操作細節並討論它的一些示例。在討論 reduce()
操作之前。讓我們首先討論減少。
Java 中的 reduce
是什麼
JDK 中的許多終端操作(例如平均值、求和、最小值、最大值和計數)結合流的內容以輸出單個值。還原操作執行相同的操作並返回單個流。
此外,JDK 包括返回集合而不是單個值的還原操作。許多還原過程完成特定的工作,例如計算值的平均值或對專案進行分類。
另一方面,JDK 具有稱為還原和收集的通用還原操作。
Java 8 中的流 reduce()
操作
reduce()
操作是一種通用的還原操作。reduce()
操作的語法是:
T reduce(T identity, BinaryOperator<T> accumulator)
reduce
操作有兩個引數:
identity
:identity
元素既是還原的起始值,也是流不包含元素時的預設結果。accumulator
:accumulator
函式接受兩個引數:部分還原結果和流的下一個元素。它給了我們一個新的部分結果。
reduce()
操作是一種終端操作。
在 Java 中使用 reduce()
運算求和
讓我們使用 Java 中的 Stream API 計算陣列中所有元素的總和。看下面的程式碼:
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
int sum = Arrays.stream(numbers).reduce(0, (a, b) -> a + b);
System.out.print("sum: " +sum);
}
}
輸出:
sum: 2422
如果我們不使用 reduce()
函式,我們將不得不編寫下面的程式碼來獲取所有元素的總和。請參見下面的示例。
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
int sum = 0;
for (int i : numbers) {
sum += i;
}
System.out.println("sum : " + sum);
}
}
輸出:
sum : 2422
在 Java 中使用 reduce()
和方法參考求和
我們還可以按如下方式傳遞 sum()
方法引用 Integer::sum
以獲得所有元素的總和。看下面的程式碼:
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
int sum = Arrays.stream(numbers).reduce(0, Integer:: sum);
System.out.print("sum: " +sum);
}
}
輸出:
sum: 2422
如果陣列為空並且我們通過它來獲取元素的總和,那麼它不會丟擲任何異常,而是給出零結果。請參見下面的示例。
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {};
int sum = Arrays.stream(numbers).reduce(0, Integer:: sum);
System.out.print("sum: " +sum);
}
}
輸出:
sum: 0
如我們所見,如果陣列為空,則返回標識元素。
在 Java 中使用 reduce()
操作查詢最小值和最大值
通常,要找到陣列中的最小和最大元素,我們使用 for
迴圈和 if-else
語句的組合,例如:
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
// finding the min element
int min = numbers[0];
for(int i: numbers){
if(min > i){
min = i;
}
}
// finding the max element
int max = numbers[0];
for(int i: numbers){
if(max < i){
max = i;
}
}
//printing the max and min value
System.out.println("max: " +max);
System.out.println("min: " +min);
}
}
輸出:
max: 985
min: 20
我們可以使用 reduce()
操作在陣列中找到最小和最大元素,這使我們的程式碼更加簡潔。請參見下面的示例。
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
// finding the min element
int min = Arrays.stream(numbers).reduce(Integer.MAX_VALUE, (a, b) -> a < b ? a : b);
// finding the max element
int max = Arrays.stream(numbers).reduce(Integer.MIN_VALUE, (a, b) -> a > b ? a : b);
//printing the max and min value
System.out.println("max: " +max);
System.out.println("min: " +min);
}
}
輸出:
max: 985
min: 20
我們還可以使用方法引用來計算陣列中的最小和最大元素。看下面的程式碼:
import java.util.Arrays;
public class SimpleTesting {
public static void main(String args[]) {
int[] numbers = {45, 56, 87, 323, 47, 20, 658, 985, 78, 123};
// finding the min element
int min = Arrays.stream(numbers).reduce(Integer.MAX_VALUE, Integer::min);
// finding the max element
int max = Arrays.stream(numbers).reduce(Integer.MIN_VALUE, Integer::max);
//printing the max and min value
System.out.println("max: " +max);
System.out.println("min: " +min);
}
}
輸出:
max: 985
min: 20
まとめ
在本教程中,我們瞭解了還原操作。然後,我們深入探討了 reduce()
操作的主題。最後,我們看到了幾個如何簡潔地執行基本算術函式的示例。