[Java]Map(マップ)の平均値を取得するには?

Java

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

Map(マップ)の値(value)の平均値を取得する方法を紹介します。

スポンサーリンク

方法

Map(マップ)の値(value)の平均値を取得する方法は、2つあります。

average()

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

まず、Mapからvalues()、values()からstream()を呼び出します。

stream()から引数をそのまま返すラムダ式を指定したmapToDouble()を呼び出します。

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

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

//map=対象のマップ
double average = map.values()
                   .stream()
                   .mapToDouble(a -> a)
                   .average()
                   .orElse(default);

上記のorElse()は、対象のMap(マップ)の値(value)の平均値を返します。

orElse()を省略した場合は、戻り値がOptionalDouble型になります。

使用例

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        Map<String, Integer> numbers = new HashMap<String, Integer>();
        numbers.put("three", 3);
        numbers.put("two", 2);
        numbers.put("ten", 10);
        numbers.put("eight", 8);
        numbers.put("five", 5);
        
        double average = numbers.values()
                            .stream()
                            .mapToDouble(a -> a)
                            .average()
                            .orElse(0);
                            
        System.out.println(average);
    }
}
出力:
5.6

合計値

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

まず、Mapの合計値を取得します。

そして、取得した合計値をMapから呼び出したsize()で割ります。

//map=対象のマップ

//合計値を取得
double sum = 0;
for (int i: map.values()) sum += i;

//平均値を取得
double average = sum / map.size();

上記の割り算は、対象のMap(マップ)の値(value)の平均値を取得します。

使用例

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        Map<String, Integer> numbers = new HashMap<String, Integer>();
        numbers.put("three", 3);
        numbers.put("two", 2);
        numbers.put("ten", 10);
        numbers.put("eight", 8);
        numbers.put("five", 5);
        
        double sum = 0;
        for (int i: numbers.values()) sum += i;
        double average = sum / numbers.size();
                            
        System.out.println(average);
    }
}
出力:
5.6

まとめ

Map(マップ)の値(value)の平均値を取得する方法は、次の2つです。

  • average()を使う方法
    double average = map.values() .stream() .mapToDouble(a -> a) .average().orElse(default);
  • 合計値を使う方法
    double sum = 0;
    for (int i: map.values()) sum += i;
    double average = sum / map.size();

コメント

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