Collectors.toMap()keyMapper

Phi*_*lip 5 java hashmap java-8 java-stream

我有一个  List<UserMeal>集合,UserMeal有:

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;
 }
}
Run Code Online (Sandbox Code Playgroud)

我需要把它转换成  Map<LocalDate, Integer>.

映射的键必须是集合中UserMeal项的dateTime(转换为LocalDate).

并且地图的价值必须是calories.

我无法弄清楚如何使用流来做到这一点.就像是:

items.stream().collect(Collectors.toMap(...));
Run Code Online (Sandbox Code Playgroud)

有帮助吗?

这是我当前的代码,显然不起作用.

Map<LocalDate, Integer>  values = mealList.stream()
            .collect(Collectors.toMap(m->m.getDateTime().toLocalDate(),
                    m-> {/* HUH? */}));
Run Code Online (Sandbox Code Playgroud)

Eug*_*ene 5

你需要一个不同的Collector:

Map<LocalDate, Integer>  values = mealList.stream()
        .collect(Collectors.groupingBy(
                 m -> m.getDateTime().toLocalDate(),
                 Collectors.summingInt(UserMeal::getCalories)));
Run Code Online (Sandbox Code Playgroud)

或者您可以使用Collectors.toMap另外一个参数来告诉如何合并条目.