我有一个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>。
映射的键必须是集合中的dateTime项(转换为LocalDate)。
地图的值必须是calories的和。
我想不出如何用流来做这件事。类似于:
items.stream().collect(Collectors.toMap(...));有什么帮助吗?
这是我目前的代码,显然不起作用。
Map<LocalDate, Integer> values = mealList.stream()
.collect(Collectors.toMap(m->m.getDateTime().toLocalDate(),
m-> {/* HUH? */}));发布于 2017-10-29 21:08:39
你需要一个不同的Collector
Map<LocalDate, Integer> values = mealList.stream()
.collect(Collectors.groupingBy(
m -> m.getDateTime().toLocalDate(),
Collectors.summingInt(UserMeal::getCalories)));或者您可以使用Collectors.toMap,它还有一个参数来说明如何合并条目。
https://stackoverflow.com/questions/47005219
复制相似问题