ArrayList
состоит из объектов, каждый из которых имеет температуру и время.
Необходимо найти максимальное значение температуры за каждый день.
Пока получается найти просто максимальное значение температуры следующим образом:
for (int i = 1; i < history.size(); i++) {
if (history.get(0).getCelsius() > max &&
history.get(0).getDate().equals(history.get(i).getDate())) {
max = history.get(0).getCelsius();
}
}
Пытаюсь придумать как это лучше написать, но ничего не получается. Может быть есть какие-нибудь подсказки/наводки. Понимаю, что надо определить, что history.get(i).getDate()
не должно равняться history.get(i).getDate()
с таким же значением, но как это сделать, не знаю.
У меня получилось такое решение:
histories
.stream()
.collect(
//группируем по дате, отбрасывая время
Collectors.groupingBy(e -> DateTimeFormatter.ISO_LOCAL_DATE.format(e.getDate()),
//выбираем максимальный элемент на основе температуры
Collectors.maxBy((e1, e2) -> (int) (e1.getCelsius() - e2.getCelsius()))))
//выводим результат
.forEach((date, history) ->
System.out.println(date + " - " + history.map(History::getCelsius).get()));
где :
List<History> histories = new ArrayList<>();
А History
имеет следующую структуру:
@Data
private static class History {
LocalDateTime date;
double celsius;
}
Создайте Hashmap
, где ключем будет день, а значением максимальный градус. В каждой итерации вы ищете, есть ли в мапе этот день, если нет - добавляете и день и градус. Если же день уже был в мапе, просто сравниваете значения градусов и если нужно перезатираете
В качестве альтернативного решения на Java 8:
Map<Date, Double> result = history.stream().collect(Collectors.toMap(HeatSensor::getDate, HeatSensor::getCelsius, (a, b) -> a == null ? b : Math.max(a, b)));
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Проблема в следующем: Подключаюсь к Яндекс картинкам, беру URL изображения