UpdateDate
относится к типу Date
, и вы пытаетесь собрать как LocalDate
, поэтому вам просто нужно преобразовать Date
в LocalDate
:
Map<LocalDate, Statistics> collect = prices.stream()
.collect(Collectors.toMap(m -> m.getUpdateDate()
.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate(),
p -> new Statistics(p.getAvgPrice().doubleValue(),
p.getMaxPrice().doubleValue(),
p.getMinPrice().doubleValue())
));
Подробнее о Преобразование даты в LocalDate или LocalDateTime и Back
Или вместо этого можно создать метод, подобный следующему:
public LocalDate convertToLocalDateViaInstant(Date dateToConvert) {
return dateToConvert.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
}
, и ваш код может быть:
Map<LocalDate, Statistics> collect = prices.stream()
.collect(Collectors.toMap(
m -> this.convertToLocalDateViaInstant(m.getUpdateDate()),
p -> new Statistics(p.getAvgPrice().doubleValue(),
p.getMaxPrice().doubleValue(),
p.getMinPrice().doubleValue())
));
Лучшее решение
лучшее решение - просто изменить updateDate
тип на LocalDate
:
private LocalDate updateDate;
, и вы можете просто использовать свой код