我有一个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? */}));
答案 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'
,其中还有一个参数可以告诉您如何合并条目。