1. 序章

このクイックチュートリアルでは、Java標準ループとストリーム API。

2. 配列要素の合計を見つける

2.1. Forループを使用した合計

配列内のすべての要素の合計を見つけるために、配列を反復処理し、各要素を合計累積変数に追加するだけです。

これは非常に単純にsum 0で始まり、配列内の各項目を追加していきます。

public static int findSumWithoutUsingStream(int[] array) {
    int sum = 0;
    for (int value : array) {
        sum += value;
    }
    return sum;
}

2.2. JavaStreamAPIを使用した合計

同じ結果を達成するためにStreamAPIを使用できます。

public static int findSumUsingStream(int[] array) {
    return Arrays.stream(array).sum();
}

sum()メソッドはプリミティブ型ストリームのみをサポートすることを知っておくことが重要です。

ボックス化されたInteger値でストリームを使用する場合は、最初にmapToIntメソッドを使用してストリームをIntStreamに変換する必要があります。

その後、 sum()メソッドを新しく変換されたIntStreamに適用できます。

public static int findSumUsingStream(Integer[] array) {
    return Arrays.stream(array)
      .mapToInt(Integer::intValue)
      .sum();
}

StreamAPIの詳細についてはこちらをご覧ください。

3. Java配列で平均を見つける

3.1. StreamAPIなしの平均

配列要素の合計を計算する方法がわかれば、平均を見つけるのは非常に簡単です。平均=要素の合計/要素の数のように:

public static double findAverageWithoutUsingStream(int[] array) {
    int sum = findSumWithoutUsingStream(array);
    return (double) sum / array.length;
}

メモ

  1. intを別のintで割ると、intの結果が返されます。 正確な平均を取得するために、最初に合計を2倍にキャストします。
  2. Java Array には、配列内の要素の数を格納するlengthフィールドがあります。

3.2. JavaStreamAPIを使用した平均

public static double findAverageUsingStream(int[] array) {
    return Arrays.stream(array).average().orElse(Double.NaN);
}

IntStream.average()は、値を含まない可能性があり、特別な処理が必要なOptionalDoubleを返します。

thisの記事のOptionalsと、 Java 8DocumentationOptionalDoubleクラスの詳細をお読みください。

4. 結論

この記事では、int配列要素の合計/平均を見つける方法について説明しました。

いつものように、コードはGithubから入手できます。