No puedo encontrar una manera simple de encontrar la suma de todas las llaves dentro de un ListMultiMap en Java.
Tengo un ListMultiMap: ListMultimap<String, Long> foodCals = ArrayListMultimap.create();
Que contiene diferentes teclas con varios valores dentro de ellos:
["19/03/2020": 77, 88, 88], ["18/03/2020": 22, 33, 21], ["17/03/2020": 77, 33, 88]
¿Cómo encontrar el total de cada clave? Y obtener una salida como: 1-253, 2-76, 3-198.
Algo como esto:
int p = 0;
for(String s : foodCals.keySet()){
System.out.Println(p + foodCals.sumOfKey(p)) //Print the index number + the sumOfKey (sumOfKey doesn't exist).
p++;
}
No hay incorporado en función de hacerlo, pero el tratamiento de la multimap como un mapa (con asMap()
) le dará una colección de los valores por día. A partir de ahí, sólo tiene que resumir ellos, por ejemplo, transmitiéndolos y su conversión a las primitivas:
int p = 0;
for (Collection<Long> vals : foodCals.asMap().values()) {
System.out.println(p + " - " + vals.stream().mapToLong(Long::longValue).sum());
p++;
}
EDITAR:
Para versiones anteriores de Java (antes 8), debe aplicarse la misma lógica, aunque la sintaxis es un poco clunkier, y que tendrá que sumar los valores de sí mismo:
int p = 0;
for (Collection<Long> vals : foodCals.asMap().values()) {
long sum = 0L;
for (Long val : vals) {
sum += val;
}
System.out.println(p + " - " + sum);
p++;
}