Как суммировать элементы из списка ключей, используя ListMultimap из Guava - PullRequest
1 голос
/ 21 января 2020

Пример:

Я хочу суммировать элементы внутри каждого ключа, который в основном представляет собой ArrayList элементов "двойные числа". Гуава ArrayListMultimap объявлен следующим образом:

ListMultimap <String, Double> multimap = LinkedListMultimap.create(); 

и отображается так: «3 ключа ArrayList»:

HH_0=[0.1, 0.4, 0.2, 0.3, 0.1], 
HH_1=[0.1,0.2], 
HH_2=[0.1] 

Суммирование должно храниться в массиве или в любой простой структуре, например, такой:

array_sum=[1.1,0.3,0,1]

фактический размер multimap равен 8 , а не 3 , потому что если любой ключ имеет более одного значения в своем массиве, означает, что ключ является дубликатом, и это причина использования multimap из Guava , он может хранить дублированные ключи с несколькими (разными или одинаковыми) значениями в ArrayList с наоборот в случае простого Hashmap.

Мое эссе: Я извлек ключи в array_Str из Strings для сравнения. Мы предполагаем, что длина требуемого array_sum [] уже запущена с 3:

double sum = 0.0;
String array_Str = {"HH_0","HH_1","HH_2"};

       for (int i = 0; i < array_sum.length; i++) {
           for (Entry<String, Double> entry : multimap.entries())  {


           if( entry.getKey().equals(array_sum[i])) {

               sum=sum+ entry.getValue();
           }

           }
           array_sum[i]=sum;   
       }

Любое руководство очень ценится.

1 Ответ

0 голосов
/ 22 января 2020

Использование Java 8 потоков для небольшого упрощения:

for (int i = 0; i < array_str.length; i++) {
  array_sum[i] = multimap.get(array_str[i]).stream().mapToDouble(d -> d).sum();
}
...