найти максимальное значение в ArrayList

529
12 февраля 2017, 10:35

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() с таким же значением, но как это сделать, не знаю.

Answer 1

У меня получилось такое решение:

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;
}
Answer 2

Создайте Hashmap, где ключем будет день, а значением максимальный градус. В каждой итерации вы ищете, есть ли в мапе этот день, если нет - добавляете и день и градус. Если же день уже был в мапе, просто сравниваете значения градусов и если нужно перезатираете

Answer 3

В качестве альтернативного решения на Java 8:

Map<Date, Double> result = history.stream().collect(Collectors.toMap(HeatSensor::getDate, HeatSensor::getCelsius, (a, b) -> a == null ? b : Math.max(a, b)));
READ ALSO
Navigation Drawer в фрагменте [дубликат]

Navigation Drawer в фрагменте [дубликат]

На данный вопрос уже ответили:

266
JSoup парсинг изображений из Yandex

JSoup парсинг изображений из Yandex

Проблема в следующем: Подключаюсь к Яндекс картинкам, беру URL изображения

444