Как эффективно взять среднее значение нескольких HashMaps в массиве HashMaps? - PullRequest
1 голос
/ 11 апреля 2019

У меня есть список HashMaps

List<Map<String, Object>> arrOfMaps = new ArrayList<>();

Все HashMaps имеют одинаковые ключи, а количество ключей во всех HashMaps одинаково.

Теперь я хочу взять среднее значение всех значений всех ключей в HashMap последовательно.

Например, предположим, ниже приведены мои HashMaps, которые я получаю из массива HashMaps

arrOfMaps[0]={
A:1,
B:1
}

arrOfMaps[1]={
A:4,
B:5
}

arrOfMaps[2]={
A:4,
B:7
}

.
.
.

Я хочу получить среднее значение A из 3-х последовательных хэш-карт, т.е. A_avg = (1 + 4 + 4) / 3, B_avg = (1 + 5 + 7) / 3 и т. Д.

Что может быть эффективным методом для этого?

1 Ответ

2 голосов
/ 11 апреля 2019

Среднее значение можно найти с помощью потока:

Map<String, Double> average = arrOfMaps.stream()
    .flatMap(map -> map.entrySet().stream())
    .collect(Collectors.groupingBy(Map.Entry::getKey, 
             Collectors.averagingInt(value -> (Integer)(value.getValue()))));

System.out.println(average);  // {A=3.0, B=4.333333333333333}

Используя flatMap, вы получаете набор входных потоков для всех входящих карт.Затем вы группируете по строковому ключу и получаете среднее значение по каждому ключу, используя groupingBy и averagingInt соответственно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...