Collections.max(arraylist)
不起作用,常规for
循环也不起作用。
我拥有的是:
ArrayList<Forecast> forecasts = current.getForecasts();
Collections.max(forecast)
给了我这个错误:
The method max(Collection<? extends T>) in the type Collections is
not applicable for the arguments (ArrayList<Forecast>)
ArrayList
拥有Forecast
个对象,每个对象都有一个int
字段,表示每天的温度。我试图将最大值存储在int max。
答案 0 :(得分:12)
由于您的ArrayList
包含Forecast
个对象,您需要定义max
方法应如何找到ArrayList
中的最大元素。
根据这一点应该有效:
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();
答案 1 :(得分:1)
Streams非常适合这类问题。
Forecast highest = forecasts.stream()
.max((fc1, fc2) -> fc1.getTemp() - fc2.getTemp())
.get();
答案 2 :(得分:0)
另一个解决方案是使用map reduce:
Optional<Forecast> element = forecasts
.stream()
.reduce((a,b) -> a. getTemperature() > b.getTemperature() ? a : b );
通过这种方式,您甚至可以使用parallelStream()
答案 3 :(得分:0)
这是从arraylist
返回最大值的简单方法公共静态对象GetMaxValue(ArrayList arrayList)
{
static $validates_uniqueness_of = array(
array('username')
);
}
答案 4 :(得分:-1)
我有两个想法。首先,您在参数中使用了forecast
,但它应该是forecasts
。此外,您从未提供类Forecast
的代码。我可能错了,因为我没有看到您的所有代码,但您需要将预测转换为Integer
。通过Integer i = Integer.parseInt(forecasts);
执行此操作。接下来使用Collections.max(i)