java - collection - Collectors.toMap() keyMapper
stream collection java (1)
Tengo una colección List<UserMeal>
, donde UserMeal tiene:
public class UserMeal {
private final LocalDateTime dateTime;
private final int calories;
public UserMeal(LocalDateTime dateTime, int calories) {
this.dateTime = dateTime;
this.calories = calories;
}
public LocalDateTime getDateTime() {
return dateTime;
}
public int getCalories() {
return calories;
}
}
Necesito convertirlo en Map<LocalDate, Integer>
.
La clave del mapa debe ser el dateTime
(convertido a LocalDate
) del elemento UserMeal en la colección.
Y el valor del mapa debe ser la suma de calories
.
No puedo entender cómo hacer esto con las transmisiones. Algo como:
items.stream().collect(Collectors.toMap(...));
¿Alguna ayuda?
Aquí está mi código actual, que obviamente no funciona.
Map<LocalDate, Integer> values = mealList.stream()
.collect(Collectors.toMap(m->m.getDateTime().toLocalDate(),
m-> {/* HUH? */}));
Necesitas un Collector
diferente:
Map<LocalDate, Integer> values = mealList.stream()
.collect(Collectors.groupingBy(
m -> m.getDateTime().toLocalDate(),
Collectors.summingInt(UserMeal::getCalories)));
O puede usar Collectors.toMap
que tiene un argumento más que le dice cómo fusionar entradas.