[Java]リスト(List)の平均値を取得するには?

Java

どうも、ちょげ(@chogetarou)です。

リスト(List)の平均値を取得する方法を紹介します。

スポンサーリンク

方法

リスト(List)の平均値を取得する方法は、2つあります。

average()

ひとつは、average()を使う方法です。

まず、リスト(List)からstream()、stream()からmapToDouble()を呼び出します。

mapToDouble()の引数に、引数をそのまま返すラムダ式を指定します。

そして、mapToDouble()からaverage()、average()からorElse()を呼び出します。

orElse()の引数に結果がNULLの場合の値(デフォルト値)を指定します。

//list=対象のリスト, default = NULLの場合の値
double average = list.stream()
                   .mapToDouble(a -> a)
                   .average()
                   .orElse(default);

上記のaverage()は、stream()を呼び出したリスト(List)の平均値を取得します。

orElse()を省略したい場合は、average()の結果は、OptionalDouble型になります。

使用例

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) throws Exception {
        ArrayList<Integer> nums = new ArrayList<Integer>(5);
        nums.add(4);
        nums.add(9);
        nums.add(2);
        nums.add(1);
        nums.add(7);
        
        
        double average = nums.stream()
                            .mapToDouble(a -> a)
                            .average()
                            .orElse(0);
        
        System.out.println(average);
    }
}
出力:
4.6

合計値

もうひとつは、合計値を使う方法です。

まず、リスト(List)の合計値を取得します。

そして、合計値をリストから呼び出したsize()の戻り値で割ります。

//list=対象のリスト

//合計値を取得
int sum = 0; 
for (int i : list) sum += i;
        
//平均値を取得
double average = sum / list.size();

上記の割り算は、リスト(List)の平均値を取得します。

使用例

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) throws Exception {
        ArrayList<Integer> nums = new ArrayList<Integer>(5);
        nums.add(4);
        nums.add(9);
        nums.add(2);
        nums.add(1);
        nums.add(7);
        
        int sum = 0;
        for (int i : nums) sum += i;
        
        double average = sum / nums.size();
        
        System.out.println(average);
    }
}
出力:
4.6

まとめ

リスト(List)の平均値を取得する方法は、次の2つです。

  • average()を使う方法
    double average = list.stream().mapToDouble(a -> a).average().orElse(default);
  • 合計値を使う方法
    double average = sum / list.size();

コメント

タイトルとURLをコピーしました