Collectors.toMap()中的keyMapper

5

我有一个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;
 }
}

我需要将它转换为Map<LocalDate,Integer>

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

而映射的值必须是calories的总和。

我无法使用流解决这个问题。可能像这样:

items.stream().collect(Collectors.toMap(...));

需要帮忙吗?

这是我的当前代码,显然无法工作。

Map<LocalDate, Integer>  values = mealList.stream()
            .collect(Collectors.toMap(m->m.getDateTime().toLocalDate(),
                    m-> {/* HUH? */}));
1个回答

5
您需要一个不同的Collector:
Map<LocalDate, Integer>  values = mealList.stream()
        .collect(Collectors.groupingBy(
                 m -> m.getDateTime().toLocalDate(),
                 Collectors.summingInt(UserMeal::getCalories)));

或者您可以使用Collectors.toMap,它有一个额外的参数来告诉如何合并条目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接