Используя fitbit API ЧСС я хотел найти среднюю частоту сердечных сокращений для каждой недели в течение 1 года. Был задействован Java 8 Streams API, но я не могу найти лучший способ сделать это. Моя текущая реализация не настолько эффективна, чтобы найти значение для каждого месяца.
Будет ли Spilterators лучшей альтернативой реализации или есть ли другой способ сделать его более эффективным?
public class HeartRateService {
@Autowired
private FitbitRepository fitbitRepository;
public List<HeartRate> getHeartRateDetails() {
List<HeartRate> heartRateResponse = new ArrayList<>();
Map<Object, IntSummaryStatistics> results = fitbitRepository.getHeartRate().getActivitiesHeart().stream()
.filter(hr-> hr.getValue().getRestingHeartRate() != 0)
.collect(Collectors.groupingBy(HeartRateActivity::getMonth, Collectors.summarizingInt(hr -> hr.getValue().getRestingHeartRate())));
results.forEach((month,summary) -> {
HeartRate hr= new HeartRate();
hr.setMonth(month.toString());
hr.setRestingHeartRate((int) summary.getAverage());
heartRateResponse.add(hr);
});
return heartRateResponse;
}}
Структура класса (POJO) для API ЧСС -
public class HeartRate {
@JsonProperty("activities-heart")
private List<HeartRateActivity> activitiesHeart;
public List<HeartRateActivity> getActivitiesHeart() {
return activitiesHeart;
}
public void setActivitiesHeart(List<HeartRateActivity> activitiesHeart) {
this.activitiesHeart = activitiesHeart;
}}
public class HeartRateActivity {
private String dateTime;
private HeartRateValue value;
public String getMonth() {
return dateTime.substring(0, 7);
}}
public class HeartRateValue {
private List<HeartRateZone> customHeartRateZones;
private List<HeartRateZone> heartRateZones;
private int restingHeartRate = 0;
}
- Сеттеры и геттеры доступны для всех атрибутов.
Структуру полезной нагрузки Fitbit можно посмотреть на API временных рядов сердечного ритма fitbit
Спасибо