Collectors.toMap()keyMapper

时间:2017-10-29 21:03:40

标签: java java-8 hashmap 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;
 }
}

我需要将其转换为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 个答案:

答案 0 :(得分:5)

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

Collectors.toMap

您可以使用>>> import pendulum >>> pointTimeString = '2017-09-08T14:55:38Z' >>> pointTime = pendulum.parse(pointTimeString) >>> startTimeString = '15:52' ,其中还有一个参数可以告诉您如何合并条目。