collection java java-8 hashmap java-stream

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.