Collections.max(arraylist) doesn't work, and a regular for loop won't work either.
What I have is:
ArrayList<Forecast> forecasts = current.getForecasts();
Collections.max(forecast) gives me this error:
The method max(Collection<? extends T>) in the type Collections is
not applicable for the arguments (ArrayList<Forecast>)
The ArrayList holds Forecast objects which each has an int field for the temperature of each day. I am trying to store the max in an int max.
As your ArrayList contains Forecast objects you'll need to define how the max method should find the maximum element within your ArrayList.
something along the lines of this should work:
ArrayList<Forecast> forecasts = new ArrayList<>();
// Forecast object which has highest temperature
Forecast element = Collections.max(forecasts, Comparator.comparingInt(Forecast::getTemperature));
// retrieve the maximum temperature
int maxTemperature = element.getTemperature();
Another solution is use map reduce:
Optional<Forecast> element = forecasts
.stream()
.reduce((a,b) -> a.getTemperature() > b.getTemperature() ? a : b );
In this way you could even use use parallelStream()
Streams are perfect for these sort of problems.
Forecast highest = forecasts.stream()
.max((fc1, fc2) -> fc1.getTemp() - fc2.getTemp())
.get();