190320 Development Note

剛要加總一個 int array

用了 "java integer array sum" 當關鍵字

找到以下文章
Find Sum and Average in a Java Array
https://www.baeldung.com/java-array-sum-average

文中使用的是 Java Stream API,範例程式如下。
Arrays.stream(array).sum();

以下為 Arrays 的 javadoc。
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Arrays.html 

Arrays.stream( int[] array ) 回傳的是 IntStream,IntStream 是 1.8 才有的類別。難怪我對它不熟。

以下為 IntStream 的 javadoc
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/IntStream.html

在 IntStream 的 sum() 之說明中提到,此 sum() 等同於呼叫以下的方法。
reduce( 0, Integer::sum );

再看 IntStream 的 reduce​( int identity, IntBinaryOperator op ) 的說明,提到此方法等同以下的程序
--------------------------------------------------------------------------
int result = identity;

for (int element : this stream)
         result = accumulator.applyAsInt( result, element )

return result;
--------------------------------------------------------------------------

上面提及 accumulator,暫且先擱置。

目前就我的理解,上面帶入的 identity 就是所謂的初始值。
至於要進行何種運算,就看帶入的 IntBinaryOperator 來決定。

剛剛在 sum() 的說明中有提到另外一點,就是此方法為 terminal operator
意思為在呼叫完 sum() 時,該 Stream 就無法再使用。
如需再使用 Stream 的相關功能,則必須另起一個 Stream。

以下為 IntBinaryOperator 的 javadoc,這也是 1.8 才有的 interface
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/function/IntBinaryOperator.html

依 IntBinaryOperator 的名稱,可以知道其為整數二元運算。此 interface 僅有一方法如下
int applyAsInt​( int left, int right )

用 "java double colon" 找到以下文章
Double colon (::) operator in Java
https://www.geeksforgeeks.org/double-colon-operator-in-java/

其實看到這邊對 IntBinaryOperator 與雙冒號的語法之間的關聯還是一知半解。
有機會再對其進一步的研究。

至少我的整數陣列加總一行就能解決。

=======================================











留言

這個網誌中的熱門文章

泰文子音與字形之間的變化

AUTOMAXX UP-5HX 使用心得